【问题标题】:Git cherry pick into a new subdirectoryGit 樱桃选择进入一个新的子目录
【发布时间】:2021-06-26 12:18:30
【问题描述】:

我经常不得不从旧项目 git cherry-pick 到新项目。新项目将所有文件托管在 /server/ 子目录中。这会抛出它认为文件应该是的所有樱桃选择,例如/path/to/project/myfile.php 而不是 /path/to/project/server/myfile.php

有没有办法用 Git 解决这个问题?

非常感谢。

【问题讨论】:

    标签: git cherry-pick git-cherry-pick


    【解决方案1】:

    如果旧项目的 git root 位于 /path/to/project_old 而新项目的 git root 位于 /path/to/project_new/server,则从一个项目到另一个项目的挑选很容易:

    假设两者都是本地路径,您可以将 /path/to/project_old 作为远程添加到 /path/to/project_new/server(或直接从中克隆)并执行所有 git 命令,就好像 /path/to/project_old 将是一个 git 远程服务器:

    希望这能解释这个想法:

    cd /path/to/project_new
    git clone /path/to/project_old server
    cd server
    git cherry-pick <commit-hash>
    

    【讨论】:

      【解决方案2】:

      因为精选合并,Git 有时会自己解决这个问题。如果 Git 自己无法解决这个问题,您可以尝试调整重命名检测阈值级别:git cherry-pick -X find-renames=<em>value</em>value 可以用百分比表示,带有文字百分比字符,例如,50%(默认值)、75%(如果它正在查找实际上不存在的重命名,请收紧重命名查找有意义),25%(如果找不到重命名,则松开重命名查找)等等。或者,只要该值精确地表示为两位数,您就可以省略 % 字符:

      git cherry-pick -X find-renames=25 <hash>
      

      如果您的 Git 非常旧,find-renames 可能会拼写为 rename-threshold。请查阅您已安装的 Git 文档,特别是 git merge 的文档。

      如果一直降低重命名阈值(至01;零仅表示“禁用”因此不起作用)没有帮助,不幸的是没有简单的方法来处理这个问题。不过,您可以将提交转换为补丁(例如,使用 git format-patch)并在生成的补丁中编辑路径名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-14
        • 2010-09-18
        相关资源
        最近更新 更多