混帐与重命名的文件
我有一个大的网站,我正在进入一个新的框架,在这个过程中添加git。 当前网站没有任何版本控制。
我开始复制该网站到一个新的git存储库。 我做了一个新的分支,并且做了所有必要的改变,使它能够与新的框架一起工作。 其中一个步骤是更改所有页面的文件扩展名。
现在在我一直在新网站上工作的时候,对旧网站上的文件进行了更改。 所以我切换到掌握并复制了所有这些变化。
问题是,当我将分支与新的框架合并到主分支上时,每个在主分支上更改的文件都有冲突。
我不会担心,但有几百个文件的变化。 我已经尝试了git rebase
和git rebase --merge
合并没有运气。
如何合并这两个分支而不处理每个文件?
从git 1.7.4开始,你可以指定合并的重命名阈值为git merge -X rename-threshold=25
,以便控制25%的相似度已经足够考虑两个文件重命名候选。 这个,根据情况加上-X ignore-space-change
可能会使重命名检测更可靠。
然而,我想要更直接的控制,并在最后几天做了一个相关的剧本。 也许它有帮助 – 让我知道。
应该有自动工作,感谢重新检测。 下面是示例会话:
$ git inittesting 在/tmp/jnareb/test/.git/中初始化了空的Git仓库 $ cp〜/ git / README。 #示例文件,足够大,以便重命名检测工作 $ git add。 $ git commit -m'初始提交' [master(root-commit)b638320]初始提交 1个文件已更改,54个插入(+),0个删除( - ) 创build模式100644自述文件 $ git checkout -b新function 切换到一个新的分支“新function” $ git mv README README.txt $ git commit -m'将README重命名为README.txt' [新functionce7b731]将README重命名为README.txt 1个文件已更改,0个插入(+),0个删除( - ) 重命名README => README.txt(100%) $ git checkout master 切换到分支“主” $ sed -e's / UNIX / Unix / g'README + && mv -f README + README $ git commit -a -m'README changed' [master 57b1114] README已更改 1个文件已更改,1个插入(+),1个删除( - ) $ git merge new-feature 通过recursion进行合并。 README => README.txt | 0 1个文件已更改,0个插入(+),0个删除( - ) 重命名README => README.txt(100%)
如果你在“新特性”分支上做“git merge master”,而不是像上面那样在master上“git merge new-feature”,你会得到:
$ git merge master 通过recursion进行合并。 README.txt | 2 + - 1个文件已更改,1个插入(+),1个删除( - )
你能告诉你在做什么不同吗?
请注意,普通的“git rebase”(和“git pull –rebase”)不会重命名:您需要运行“git rebase -m”或者交互式rebase。
我find了一个解决办法。 由于文件的重命名是由脚本完成的,我可以复制新的.php文件,并在合并之前重新运行脚本。 由于文件具有相同的名称,所以合并的工作没有冲突。
以下是整个过程的步骤。
- 创buildgit repo
git init
- 复制中的现有文件
- 承诺
- 运行脚本来重命名文件
- 承诺
- 创build一个分支,但不检查出来
- 随时修正修改
- 检查你在步骤6中创build的分支
- 复制文件的新版本
- 运行脚本来重命名文件(这应该replace第一次运行的文件)
- 承诺
- 结帐大师
- 将分支合并到主
这是因为git使用新名称对文件进行了更改。
在我的情况下,重命名检测失败,我发现在合并解决scheme,我可以做到以下几点:
鉴于:
fileA: A modified file that was moved to the new place but is currently in the old place. destB: The location where fileB was moved to. This could include a new filename.
运行这些命令:
git add fileA git mv fileA destB
这就是我所要做的。 然后我承诺继续进行重组。
添加到@ Tilman的答案,与最近的git重命名选项是-X find-renames=<n>