我一直在将旧的SVN repos转换为GIT。我已经得到了要转换的分支和标记。包括在GIT中使SVN标记成为真实的的标记。
但是,我想在新创建的GIT repo中的第一个提交中添加一个gitignore,让它看起来好像文件一直都在那里一样,这样所有后续的提交(在master或分支中)都会有这个文件,因为父树会引导回第一个提交。
看起来某种形式的git rebase或者git filter-branch --tree-filter正是我所需要的,我已经尝试了其中的每一种,但是最后都得到了断开的分支。
3条答案
按热度按时间nxowjjhe1#
最近我不得不修改一个早期提交,因为提交消息中有一个有问题的拼写错误。这适用于修改任何关于先前提交的内容。我将Charles Bailey的答案修改为Combine the first two commits of a Git repository?
请注意,这将更改修改后提交的所有提交ID,因此不建议在公共仓库中使用。此外,您还必须重新创建所有标记
cnwbcb6i2#
如果需要,请在干净的工作树或新克隆上执行此操作:
未测试;)
qlfbtfca3#
假设这是一个全新的重建,那么一个技巧就是在第一次提交时开始一个分支,并在那里添加gitignore。现在你在分支的头部有了“正确”的提交。现在的技巧是-你使用
grafts
工具来重新排序感知到的提交序列。一个普通的git filter-branch
将使它永久化。尽管旧的层次结构仍将列在refs\info(IIRC)中的originals
下。虽然这将创建一个包含gitignore文件的早期提交,但所有其他提交仍然没有gitignore文件。
编辑:----------git-filter-branch,给出了例子:
git filter-branch --tree-filter 'rm filename' HEAD
和--index-filter
变体。你可以简单地
add .gitignore
你的.gitignore而不是删除,并使用--index-filter
,这样你的工作树仍然是完整的,可以从中复制。不过要先确保你有备份!如果对你有效就报告一下。