git fetch -u 的 updateInstead 等价物

Equivalent of updateInstead for git fetch -u

与其他地方的 documented and discussed 一样,git fetch 拒绝获取当前分支,除非您提供 -u 选项。

这种行为在大多数情况下都非常合理,并且显然是正确的默认设置。但是,这不是我想要的行为。相反,我想要类似配置选项 receive.denyCurrentBranch=updateInstead 的功能:如果当前工作树和索引匹配 HEAD,则允许​​获取和更新工作树;否则,使用与默认值类似的消息拒绝获取。有什么方法可以在不使用 git fetch -u 编写我自己的 porcelain 命令的情况下做到这一点?


我之所以想要这个,以防有更好的工作流程可用,是因为我正在处理许多存储在单独的 Git 存储库中的项目。他们中的大多数只是在 dev 本地分支上,它的上游是 dev/master 远程分支。当我实际进行开发时,我会在一个以我正在开发的功能命名的分支上进行,而不是 dev 分支。我希望所有远程分支都可用,所以我需要定期执行 git fetch --all -p,我还需要在我未构建的项目中执行 git pull,以便它们拥有最新代码。因为有很多项目,所以最简单的方法是在 Bash 和 运行 git fetch --all -p; git pull 中循环遍历所有项目。不幸的是,这也 运行s git pull 在我当前正在更改的项目上,这可能会导致合并冲突,而不仅仅是获取最新的依赖项。

相反,我希望我当前未处理的项目能够自动更新工作树;那么我只需要 运行 git pull 我目前正在处理的存储库。这样,我可以 运行 只有在适当的时候才可以,而当我只想针对依赖项目的最新源进行构建时,不用担心合并冲突。

您可以开始使用 git 钩子和 运行

git fetch -a

任何需要的时候

I additionally need to do a git pull in the projects I’m not building so they have the latest code ... Unfortunately, that also runs git pull on the projects I’m currently making changes on

您可以 运行 git pull --ff-only,如果有一些本地提交,它会立即失败。