使用git获取或拉取自动修剪

如果有人删除了一个远程分支,因为工作结束,我不知道,我不会做一个git fetch --prune ,最后我会推回删除的分支。

有没有一个可行的解决scheme,强制git使用prune模式时提取/拉,而不必每次指定它?

git 1.8.5(2013年第四季度)将build议 :

git fetch ”(因此也称为“ git pull ”)学会检查“ fetch.prune ”和“ remote.*.prune ”configurationvariables,并像“ --prune ”命令行选项那样工作。

这意味着,如果你设置remote.origin.prune为true:

 git config remote.origin.prune true 

任何git fetchgit pull都会自动修剪。

注:Git 2.12(2017年第1季度)将修复与此configuration有关的错误,这将使git remote rename行为不当。
请参阅“ 如何重命名git remote? ”。


请参阅commit 737c5a9 :

如果没有“ git fetch --prune ”,远程追踪分支的另一端已经移除的分支将永远保留。
有些人总是想运行“ git fetch --prune ”。

为了适应希望总是修剪或从特定远程访问的用户,添加两个新的configurationvariables“ fetch.prune ”和“ remote.<name>.prune ”:

  • fetch.prune ”允许为所有提取操作启用修剪。
  • remote.<name>.prune ”允许更改每个远程的行为。

后者自然会覆盖前者,而命令行中的--[no-]prune选项将覆盖已configuration的默认值。

由于--prune是一个潜在的破坏性操作(Git不保留已删除引用的reflog),所以我们不想在没有用户同意的情况下修剪,所以默认情况下这个configuration不会被启用。

git config --global fetch.prune true

总是--prunegit fetchgit pull你所有的Git仓库:

 git config --global fetch.prune true 

上面这个命令附加在你的全局Gitconfiguration(通常是~/.gitconfig )中。 使用git config -e --global查看您的全局configuration。

 [fetch] prune = true 

git config remote.origin.prune true

要永远--prune但从一个单一的存储库:

 git config remote.origin.prune true #^^^^^^ #replace with your repo name 

这个上面的命令添加了你的本地Gitconfiguration(通常是.git/config )下面的最后一行。 使用git config -e来查看你的本地configuration。

 [remote "origin"] url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx fetch = +refs/heads/*:refs/remotes/origin/* prune = true 

您也可以在第二个命令中使用--local ,或者在第一个命令中使用--local


git config --global gui.pruneDuringFetch true

如果你使用git gui你也可能感兴趣:

 git config --global gui.pruneDuringFetch true 

附加:

 [gui] pruneDuringFetch = true 

参考

git help config相应的文档:

--global

对于编写选项:写入全局~/.gitconfig文件而不是存储库.git/config ,如果这个文件存在并且~/.gitconfig文件不存在,则写入$XDG_CONFIG_HOME/git/config文件。

--local

写入选项:写入存储库.git/config文件。 这是默认行为。

fetch.prune

如果为true,则fetch将自动执行,就像在命令行上给出--prune选项一样。 另请参阅remote.<name>.prune

gui.pruneDuringFetch

如果git-gui在执行提取时修剪远程跟踪分支,则为“true”。 默认值是“false”。

remote.<name>.prune

设置为true时,默认从此远程--prune存将删除远程不再存在的任何远程跟踪引用(就像在命令行上给出--prune选项一样)。 覆盖fetch.prune设置(如果有的话)。

如果你总是在pruneprune ,我可以build议使用别名 。

只要inputgit config -e来打开你的编辑器,并改变一个特定项目的configuration,并添加一个类似的部分

 [alias] pfetch = fetch --prune 

当你用git pfetch读取剪枝将自动完成。