Git 内部 : Modifying `git-merge-one-file` to not use working tree

标签 git

是否可以修改默认的 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_DIRGIT_WORK_TREE

关于Git 内部 : Modifying `git-merge-one-file` to not use working tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18786823/

相关文章:

git - 'git remote add upstream' 帮助实现什么?

混帐 : How to Create local repo with symbolic links to the Git main repo

git - 基于作者的 Squash 提交

Gitosis 替代方案?

git - 有人可以向我解释 git diff 在这里看到的区别吗?

GitHub 存储库错误 : Cannot retrieve the latest commit at this time

git - 撤消 git 快进 merge

python - 从我的本地开发机器正确指定 git pull 的路径

git - 在单独的终端屏幕上显示 git diff 和 git log 输出

git - 获取 Git 控制的文件夹中所有未版本化文件的列表