我有一个以前住在Subversion仓库中的文件集合;在我的新服务器上,我已将它们导入到git仓库中,这样我就可以开始获得更多经验了。
在其他几台机器上,我已经获得了现有svn repo文件的大部分最新副本。
有没有办法同步到新的git repo,但是使用这些现有文件,所以我不必重新传输所有数据?
git是否足够智能,如果我进行提取?还是结帐?它会注意到文件是相同的而不是重新传输它们?
答案 0 :(得分:1)
Git不对文件进行操作,但对快照进行操作。并且协议git用于决定一次需要下载对整个提交的需求。如果用稍微不同的文件初始化两个repos(甚至是相同的文件,但它们没有共同的提交),那么在你获取时需要下载所有的对象,即使有很多重复的树和blob它将在以后清理。
您可以通过使用相同的文件初始化两个存储库并在运行这些命令时观察磁盘空间来尝试此操作:
du -sh .git
git remote add origin ../other
git fetch
du -sh .git
git prune
du -sh .git
fetch
步骤将复制所有数据,prune
步骤将删除所有重复的对象。
如果你想能够有效地获取,你将在某些时候必须证明git你有一些共同的提交,因为push / fetch协议通过使用整个提交(实际上是分支名称)进行通信。最简单的方法就是在某个地方克隆你的git repo,然后你可以根据这个工作做出基础并有效地同步你的各种变化。
但是,如果您可以访问多个服务器上的相同SVN快照,则可以创建相同的提交,如果您提交100%相同的树并使用相同的信息GIT_AUTHOR_NAME,GIT_AUTHOR_DATE等等。
答案 1 :(得分:0)
也许git-svn正是您要找的?
它允许在Subversion存储库和Git存储库之间进行双向操作。
我从未使用它,但我知道开发人员。它允许他们从Subversion获取文件,使用Git作为他们自己的私有版本控制系统,他们可以保存更改而无需将它们发送到Subversion。然后,一旦完成,他们就会将他们的更改推回到Subversion。