如果我使用rsync -a
或cp -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
有很多不同之处,但大部分内容似乎与原点有关。我是对的吗?
答案 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
文件可能只忽略了某些您要忽略的文件。