使用复制的 git 存储库安全吗?

问题描述 投票:0回答:3

如果我使用

rsync -a
cp -R
制作跟踪文件夹的副本,我可以像使用 git 克隆一样使用该副本吗?还是会导致各种奇怪的问题?这一切都在我的计算机上运行,因此没有其他人访问存储库。

显然,git 克隆的目录知道它是从哪里复制的,所以我可以在不指定源的情况下执行

git pull
,但假设我愿意没有它,有什么我需要担心的吗?

作为实验,我创建了一个小项目,对其进行了

clone
编辑,然后对生成的文件夹进行了
rsync
编辑。结果如下:

diff

有相当多的差异,但大部分似乎是关于起源的参考。我说得对吗?

git
3个回答
28
投票

使用“git clone”的不同之处在于,它会自动设置原始存储库,这样您就可以轻松地使用“git pull”和“git push”来同步两个存储库。此外,“git clone”不会复制存储库本地的日志、索引和其他配置。它仅复制存储库的版本历史记录(甚至可以以不同的方式存储在字节级别,因为 Git 在使用“git gc”时时不时地压缩其数据库)。

您在示例中看到的这些差异是因为 rsnc 还复制了工作目录索引、日志,并且因为 rsync-copy 没有设置远程源。存储库本地有很多配置和日志文件。但是直接复制它们没有危险,例如在恢复备份或将存储库移动到另一个目录/硬盘/机器时。


4
投票
当你克隆别人的 存储库,它基本上只是复制 该目录的内容到您的 电脑。

来自真正优秀的
Git Internals (Scott Chacon),来自 Peepcode Press

(第 44 页)。 因此,就我而言/我明白了,只是缺少对起源的引用。


1
投票

itsadok@quad ~ $ git clone project/.git project2 Initialized empty Git repository in /home/itsadok/project2/.git/ itsadok@quad ~ $ rsync -a project/ project3/ itsadok@quad ~ $ diff -r project2 project3 Only in project3/.git: COMMIT_EDITMSG diff -r project2/.git/config project3/.git/config 7,12d6 < [remote "origin"] < url = /home/itsadok/project/.git < fetch = +refs/heads/*:refs/remotes/origin/* < [branch "master"] < remote = origin < merge = refs/heads/master Files project2/.git/index and project3/.git/index differ diff -r project2/.git/logs/HEAD project3/.git/logs/HEAD 1c1 < 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131284 +0300 clone: from /home/itsadok/project/.git --- > 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131066 +0300 commit (initial): first commit diff -r project2/.git/logs/refs/heads/master project3/.git/logs/refs/heads/master 1c1 < 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131284 +0300 clone: from /home/itsadok/project/.git --- > 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <itsadok@quad.(none)> 1242131066 +0300 commit (initial): first commit Only in project2/.git/logs/refs: remotes Only in project2/.git: packed-refs Only in project2/.git/refs: remotes

	
© www.soinside.com 2019 - 2024. All rights reserved.