如果我使用
rsync -a
或 cp -R
制作跟踪文件夹的副本,我可以像使用 git 克隆一样使用该副本吗?还是会导致各种奇怪的问题?这一切都在我的计算机上运行,因此没有其他人访问存储库。
显然,git 克隆的目录知道它是从哪里复制的,所以我可以在不指定源的情况下执行
git pull
,但假设我愿意没有它,有什么我需要担心的吗?
作为实验,我创建了一个小项目,对其进行了
clone
编辑,然后对生成的文件夹进行了rsync
编辑。结果如下:diff
有相当多的差异,但大部分似乎是关于起源的参考。我说得对吗?
使用“git clone”的不同之处在于,它会自动设置原始存储库,这样您就可以轻松地使用“git pull”和“git push”来同步两个存储库。此外,“git clone”不会复制存储库本地的日志、索引和其他配置。它仅复制存储库的版本历史记录(甚至可以以不同的方式存储在字节级别,因为 Git 在使用“git gc”时时不时地压缩其数据库)。
您在示例中看到的这些差异是因为 rsnc 还复制了工作目录索引、日志,并且因为 rsync-copy 没有设置远程源。存储库本地有很多配置和日志文件。但是直接复制它们没有危险,例如在恢复备份或将存储库移动到另一个目录/硬盘/机器时。
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