我正在将项目从SVN转移到GIT。设置项目时,软件的每个组件都放入其自己的主干,标签和分支目录集中。我们希望从这个多SVN存储库方案转移到单个GIT存储库。
我相信我有一个脚本可以从SVN克隆到多个GIT存储库。至少所有的历史,分支和标签都在GIT内部。有一个问题,文件并没有真正位于适当的位置,因此将它们合并到一个存储库中并保持历史记录并不容易。
为了更详细,我们有一个目录结构,如:
root
|-->demo
|--> demo1
|-->branches
|-->tags
|-->trunk
-- file 1
-- file 2
|--> demo2
|--> <same as above>
|-->Source
|--> Package A
|--> <same as above>
|--> Package B
|--> <same as above>
我以下的程序:
然后我尝试了以下内容:
对于上面的每个存储库
所有文件都显示在正确的目录中。 git log 将显示从SVN获取的整个存储库的所有历史记录。但 git log filename 仅显示最新的提交,因此它已丢失了与主日志的链接,因为所有内容都已移动。此外,所有分支仍然将其文件放在基本目录中,因此当我执行 git checkout 时,我的树的其余部分将消失,所有这些文件都是其中的一部分分支来自的存储库。
我也尝试过:
我认为我应该做的是:
对于每个存储库
〜/ root / demo / demo1 $ git filter-branch --index-filter&#39; git ls-files -s | sed&#34; s- \ t \&#34; * - &amp; root / demo / demo1 / - &#34; | GIT_INDEX_FILE = $ GIT_INDEX_FILE.new \ git update-index --index-info&amp;&amp; mv&#34; $ GIT_INDEX_FILE.new&#34; &#34; $ GIT_INDEX_FILE&#34;&#39; HEAD
重写821c68304e6521b851903463387c1fcccb34958a(1/635)mv:无法统计'root / demo / demo1 / .git-rewrite / t /../ index.new':没有这样的文件或目录 索引过滤器失败:git ls-files -s | sed&#34; s- \ t \&#34; * - &amp; software / root / bsp / - &#34; | GIT_INDEX_FILE = $ GIT_INDEX_FILE.new \ git update-index --index-info&amp;&amp; mv&#34; $ GIT_INDEX_FILE.new&#34; &#34; $ GIT_INDEX_FILE&#34;
它引发了关于.git-rewrite / t /../ index.new文件不存在的错误。
当我尝试使用两个测试GIT存储库执行相同的操作时,它可以正常工作。我试图克隆存储库,希望可以解决问题,但它没有帮助。所以我的问题是:
如何移动从SVN创建的GIT存储库?我是否正确地从SVN创建GIT存储库?有没有更好的方法来获取所有这些小型SVN存储库并将它们合并到一个GIT存储库中?
补充说明 git update-index 和 git filter-branch 具体做什么?在这种情况下?我可以将它们分成我脚本中的其他步骤,以便我可以解决我遇到的问题吗?我想我特别要问的是什么设置 GIT_INDEX_FILE 以及它将它设置为什么?
如果有任何帮助,我正在运行git 1.9.1。