是否可以修改默认的 git-merge-one-file
程序以在不触及工作树的情况下执行索引中的所有操作,使其完全保持不变?
更新和细节
所以我现在明白,如果不使用工作树,就无法进行文件级 merge (其中 merge 作用于文件中的行而不是整个文件)。 (与对整个文件进行 merge 不同。)所以我将不得不使用工作树。
另一个细节:我同意该解决方案仅适用于无需手动解决即可自动完成 merge 的情况。如果 merge 不是自动的,它只显示一条错误消息也没关系。 (当然,保持一切干净。)
另一个细节:我没有直接使用 git-merge-one-file
,而是在这个脚本中使用它:https://gist.github.com/cool-RR/6575042
我尝试遵循@torek 的建议并使用临时工作树(如您在脚本中所见),因为这似乎是迄今为止最好的方向。问题是,我收到这些错误:
git checkout-index: my_file is not in the cache
error: my_file: cannot add to the index - missing --add option?
我用谷歌搜索了这些错误消息,但找不到任何有用的信息。
知道要做什么吗?
最佳答案
虽然 git 需要一个地方来完成它的工作,但您可以在“merge 一个文件”操作期间将它指向不同的工作树位置。
我不知道这对于 merge-one-file
是否/如何“开箱即用”,但要设置的环境变量是 GIT_WORK_TREE
:
env GIT_WORK_TREE=/some/where/else git ...
(对于大多数(但不是全部)shell,您可以省略 env
)。
一个或多或少等效的方法可能“感觉更安全”:-) 或对某些目的更方便的是在另一个目录中工作,并使用 GIT_DIR
到 repo 的位置:
cd /some/where/else
env GIT_DIR=/place/with/repo/.git git ...
您甚至可以组合它们,同时设置 GIT_DIR
和 GIT_WORK_TREE
。
关于Git 内部 : Modifying `git-merge-one-file` to not use working tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18786823/