使用'git fetch --all`跳过将某些分支/标记复制到本地Git

ryevplcw  于 2022-12-17  发布在  Git
关注(0)|答案(4)|浏览(197)

我在Git中添加了许多远程控件。每个远程控件都是一个开发人员的仓库。每天我都fetch --all查看他们创建的任何新分支。
然而,开发人员可以将“私有”分支推送到远程,比如说,所有以下划线前缀命名的分支都没有准备好评审,而其他分支已经准备好评审了。
当执行git fetch --all时,我的Git图(/libexec/git-core/git-gui)会看到所有分支,无论它们是否有下划线前缀。
我想让git fetch忽略那些_XXXX分支,以免它们被下载到本地Git。所以当我查看Git图表时,它就像这样:

*显示分支:RemoteA/Branch1RemoteB/Branch1RemoteB/Branch2
*忽略分支:RemoteA/_Branch2RemoteB/_Branch3

我该怎么做呢?

fjnneemd

fjnneemd1#

针对Git v2.29.0的更新

在Git v2.29中添加了negative refspecs,1,你可以在不改变同事习惯的情况下实现自己的初衷。
对于每个同事的remote,添加一个负refspec(即前缀为^)来排除前缀为_的分支。这是从.git/config的单元测试和负模式的单元测试中松散改编而来的。请参见下面代码块中“Fred's”remote的最后一行。

[remote "fred"]
    url = something.git
    fetch = +refs/heads/*:refs/remotes/fred/*
    fetch = ^refs/heads/_*

在命令行上,您可以使用两个选项为fred设置此设置:

  • git config --add remote.fred.fetch '^refs/heads/_*'
  • git remote set-branches --add fred '^refs/heads/_*'

原始答案

VonC's excellent answer上扩展一个特殊的“review”文件夹2,你可以修改你的.git/config的条目给你的同事的遥控器。
它曾经在的地方

[remote "fred"]
    url = something.git
    fetch = +refs/heads/*:refs/remotes/fred/*

您可以将其更改为

[remote "fred"]
    url = something.git
    fetch = +refs/heads/review/*:refs/remotes/fred/review/*
    fetch = +refs/heads/other_pattern/*:refs/remotes/fred/other_pattern/*
    fetch = +refs/heads/specific_branch:refs/remotes/fred/specific_branch

完成此操作后,您可能必须清除对已获取的refs的引用,但未来的git fetch --allgit fetch fred将不会更新指定模式之外的任何内容。
[1]关于负refspecs的文档很少,而且被淹没在较长的段落中,所以最好的地方是in Git's historyVonC's answer to a different question,在那里他将相关部分放在一起。
2或者你需要多少特殊或有趣的文件夹和分支。

xvw2m8pv

xvw2m8pv2#

您可以使用名称空间,而不是使用' _ '命名约定,将分支推入origin/review/Branch1git push Branch1:review/Branch1
(命名为“组”in that answer,或that answer中的“分层分支名称(带斜线的分支名称)”)
这样的话,你只需要获取“review”名称空间中的内容:

git fetch +refs/heads/review/*:refs/remotes/origin/review/*

唯一的其他选择是脚本,它将:

zf9nrax1

zf9nrax13#

您可以使用别名一步完成。将以下内容添加到您的~/.gitconfig文件中:

[alias]
    fall = !sh -c 'git fetch --all && git branch -r | sed /HEAD/d | grep /_ | xargs git branch -dr' --

字符串
然后输入git fall,它会删除所有包含/_的远程分支。
您可以观察到shell命令别名的复杂性。

b4wnujal

b4wnujal4#

您可以使用ignore-refs选项:

git fetch --ignore-refs branch123

相关问题