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

时间:2009-05-12 12:42:14

标签: git

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

显然,git-cloned dir知道它被复制的位置,所以我可以在没有指定源的情况下进行git pull,但假设我愿意在没有这个的情况下生活,有什么我需要担心的吗?

作为一项实验,我创建了一个小项目,clone d和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

有很多不同之处,但大部分内容似乎与原点有关。我是对的吗?

4 个答案:

答案 0 :(得分:28)

这是安全的。

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

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

答案 1 :(得分:4)

  

当你克隆别人的时候   存储库,它基本上只是副本   这个目录的内容给你   计算机。

来自真正的善良Git Internals (Scott Chacon) from Peepcode Press。 (第44页) 因此,就我所关注/我看来,只缺少对原点的引用。

最诚挚的问候。

答案 2 :(得分:1)

它完全一样,差不多,如果你想在'project3'中做同样的事情:

git remote add origin /home/itsadok/project
git branch -f master origin/master

答案 3 :(得分:0)

answered a similar question on Stack Exchange。如果您找到此答案,这是要考虑的主要事项,因为您将要与其他人共享您的回购协议:

  • 您的config文件可能具有其他人可能不在乎的遥控器。
  • 您的logs文件夹将包含您可能不想共享的参考。 Git非常擅长让您在计算机上完成令人讨厌的工作,直到对最终结果感到满意为止,然后将其推送到遥控器以(偶尔)共享它。某些令人讨厌的历史记录可能会出现在您的引用日志中,因此最好不要共享它。恕我直言。
  • 您的info/exclude文件可能只忽略了某些要忽略的文件。
  • 您还可以使用钩子,树枝和许多其他私人物品,您不想共享...