![](/img/trans.png)
[英]Migrating a svn repository without trunk to git using reposurgeon
[英]Convert an SVN repository to git with reposurgeon without creating .gitignore files?
我使用reposurgeon将我的svn转换为git存储库:( 如何使用reposurgeon将svn repo转换为git? )。
问题是,转换的标签在我创建标签时的日志中显示,而不是在它们所属的修订位置。 在SVN中,无论我多久创建它们,它们都会显示在它们所属的日志中的正确位置。
似乎这必须做一些事情,reposurgeon在每个标签中添加.gitignore的提交,如下所示:
# A simulation of Subversion default ignores, generated by reposurgeon.
*.o
*.lo
...
*.pyo
*.rej
*~
.#*
.*.swp
.DS_store
# The contents of the svn:ignoreproperty on the branch root.
*~
nbproject
*.project
如何让reposurgeon不在所有标签中为gitignore创建这样的提交? 并让它创建简单的标签,这些标签不作为提交出现在时间轴中?
用户生成的.gitignore
此消息表示reposurgeon在其正在分析的Subversion存储库中找到.gitignore文件。 这可能是因为有人使用git-svn作为实时网关,并且创建了忽略,这些忽略可能与生成的.gitignore文件中的那些一致,也可能不会与Subversion忽略属性将被转换为。 您需要做出关于在转换中使用哪组忽略的策略决策,并可能删除生成的.gitignore文件或用户创建的文件。
但没有例子如何做出这个决定。 我该怎么办呢?
您需要做出关于在转换中使用哪组忽略的策略决策,并可能删除生成的.gitignore文件或用户创建的文件。
转换前你有.gitignore吗? 如果是这样,那就与之后的那个相比较。 看来这个政策决定与你的“提交顺序”问题是分开的,对吗? 基本上,政策问题只是“获得你喜欢的最终.gitignore”。 做到达到目的所需的一切。
在git中,.gitignore文件的管理方式与任何其他文件完全相同。 所以你可以说git log .gitignore
并查看提交内容的贡献。 假设整个.gitignore文件在一个块10提交之前提交,你希望它分开。 如果是这样,你可以做一个git rebase --interactive HEAD~11
并编辑有问题的提交。 做git add --partial .gitignore; git commit
你想要分解的每一行的git add --partial .gitignore; git commit
。 然后git rebase --continue
继续结束。
如果您希望每个新的逐项提交都是它们对应的更大代码提交的一部分,那么您将再次使用-i来转换订单并使用其合作伙伴提交压缩它们。 如果这听起来像不必要的工作,它可能是。 如果可以,我建议你专注于回购的最终状态的完整性,而不是完美的历史表达。
注意:我不理解你在这种情况下使用术语“标签”,因为SVN和git都有“标签”,但你似乎也没有提到。 也许“忽视线”或“进入”会更清楚。
在版本控制中清除历史记录是有问题的。 所有分支上改变历史是有效地创建一个新的存储库,因为不再有连续性,下游的追随者什么 (每个人都必须重订)。 但是如果你想这样做,对于每个分支,找到文件系统中的所有.gitignores,看看提交的内容是什么:
git log `find . -name .gitignore`
然后你可以执行上面描述的rebase --interactive步骤来改变那些提交。 如果提交仅影响.gitignore,则可以将其删除。 但很明显,如果提交涉及100个文件,包括.gitignore,你必须将好处与坏处分开。
或者,如果您知道所有.gitignore文件的路径(签出每个分支并从上面运行查找 ),那么您可以执行类似github与filter-branch记录的操作 :
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .gitignore path/to/other/.gitignore' \
--prune-empty --tag-name-filter cat -- --all
他们还提到了一个BFG java工具,但filter-branch应该做你需要的。
在您的subversionrepository中读取后,只需添加:
expunge /gitignore/
这将删除reposurgeon自动添加的所有.gitignore文件。
我从来没有使用reposurgeon,但我已经使用内置的git svn ...
命令将许多svn存储库转换为git。 我已经关注了http://trac.parrot.org/parrot/wiki/git-svn-tutorial和http://john.albin.net/git/convert-subversion-to-git上的指南 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.