【发布时间】:2012-11-28 03:35:33
【问题描述】:
一个分支 (refactoringBranch) 进行了完整的目录重组。文件移动得乱七八糟,但内容被保留了。
我尝试合并:
git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change refactoringBranch
git status 显示大约一半的文件重命名识别。但在项目中的 10000 个文件中,有一半未被识别为已移动。
一个例子是:
# On branch master
# Changes to be committed:
# deleted: 404.php
# new file: public_html/404.php
...
# deleted: AnotherFile.php
# new file: public_html/AnotherFile.php
...
# renamed: contracts/css/view.css -> public_html/contracts/css/view.css
建议?
史前史
重构是在 git 之外进行的。我做了以下事情:
- 创建了源自
master的refactoringBranch。 - 在
refactoringBranch中删除了更改的结构,这意味着我在其他一些目录中进行了更改,然后将它们复制粘贴到我的git 存储库中。 - 添加并提交所有内容,然后尝试合并。
这是我的工作流程:
git checkout -b refactoringBranch
cp -R other/place/* ./
git add . -A
git commit -a -m "blabla"
git checkout master
git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change refactoringBranch
问题可能出现在git add . -A 步骤上。
因为如果那里的重命名检测是正确的,我会假设合并会完美无缺。
【问题讨论】:
-
我用外部工具检查过,
master中的404.php和refactoringBranch上的public_html/404.php之间的相似性似乎是95.37%。 -
那是什么外部工具?您是否使用
git diff -M90% --stat master refactoringBranch之类的东西测试了不同的重命名阈值(尝试使用各种值而不是 90%)? -
该工具是
php.net/similar_text。在我的合并命令中,我使用的阈值低至 15%。我希望它会通过。 -
该工作流程表明 master 也是您的合并基础。对吗?
标签: git