使用复制的git repo是否安全?

its*_*dok 30 git

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

显然,git-cloned dir知道它被复制的地方,所以我可以git pull不指定一个来源,但假设我愿意没有那个,我有什么需要担心的吗?

作为一个实验,我创建了一个小项目,clone然后rsync编辑它,并diff编辑生成的文件夹.结果如下:

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
Run Code Online (Sandbox Code Playgroud)

这有很大的不同,但大部分似乎是关于原点的参考.我对吗?

Esk*_*ola 28

这很安全.

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

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

  • 另一种说法是git clone实际上完全克隆了"objects"目录,当它用于在同一台机器上克隆一个repo时 - 它只是使用cpio来复制所有东西,如果目的地是,则转换为硬链接相同的文件系统.无论如何,对象目录之外的所有内容都是本地信息.简单地复制那些批发(la cp -R)而不是重新创建它们(这是git clone所做的)应该是非常安全的.当然,复制的钩子不会做任何太奇怪的事情. (2认同)