Git 删除浅克隆中的分支

Git 删除浅克隆中的分支,git,Git,我在一个git存储库的浅层克隆中工作。因为浅层克隆在.git/config文件中只列出了一个远程跟踪分支,所以要获得新的远程分支,我需要显式地添加它们。比如说 git clone --depth 1 <remote-url> git remote set-branches --add origin <branch-name> git fetch --depth 1 origin <branch-name> git checkout <branch-nam

我在一个git存储库的浅层克隆中工作。因为浅层克隆在.git/config文件中只列出了一个远程跟踪分支,所以要获得新的远程分支,我需要显式地添加它们。比如说

git clone --depth 1 <remote-url>
git remote set-branches --add origin <branch-name>
git fetch --depth 1 origin <branch-name>
git checkout <branch-name>
还是有一种不那么隐蔽的方法?我很惊讶,推动分支删除并没有修剪提取行。

选项1:避免问题

如果您不明确地告诉git您希望它获取哪些分支,那么这个问题是可以避免的。但如果您只需要获取一组选定的分支,最好跳到选项2。创建克隆时,可以说您想要所有分支

git clone --depth=1 --no-single-branch ...
或者,如果您已经克隆并希望获得其余的分支:从您的指令,而不是

git remote set-branches --add origin <branch-name>
本地和远程删除分支不再会导致问题

您可能可以使用更具选择性的模式,但如果您不想要所有东西,则可以选择单个分支

如果您已经有了存储库,并且按照上面描述的方式添加了几个分支,那么类似于我所列出的配置命令应该可以修复它。只需在第一个命令中将-unset替换为-unset all即可

选项2:解决问题

但是,如果确实需要配置来列出各个分支,则可以通过以下方式之一处理删除:

您可以使用git config直接删除该设置,而无需手动编辑任何文件

git config --unset remote.origin.fetch <branch-name>
但是,如果您添加了一堆其他分支,那么您也必须列出它们,否则就会丢失它们

git remote set-branches origin master branch1 branch2 branch3 ...
您可以自动化获取分支列表的过程

git branch | sed s/'\* '// | xargs git remote set-branches origin 

但如果当地的分支机构实际上不打算追踪原产地,那就有问题了。

我无法再现确切的情况,所以不确定。。。但git分支——未设置的上游是否有效?不幸的是,没有——报告说这是致命的:分支并没有上游信息。在删除之前,我会尝试一下,看看是否有帮助。是的,我终于重现了最初的错误,发现了一个我错过的步骤,并发现它不是很容易修复的。我会仔细考虑一下,让你知道我发现了什么。你还跟踪了很多其他分支吗?可能有,但事实上目前只有三个:master和两个task分支。我不喜欢这一个,因为你需要构建分支列表。它看起来比编辑.git/config文件更难,这取决于您的意思。如果您想绕过瓷器并手动编辑文件,可能需要更少的步骤。另一方面,瓷器可以保护你的回购协议不受侵蚀。所以如果你不喜欢它,就不要使用它;就像我说的,我在找更好的。但也要注意,构建分支列表并不是那么难——只是可能很乏味。不管怎样,你问了一些不那么隐蔽的方法。到目前为止,这是一个问题。我还想到,我们可以编写一个bash one行程序来获取git分支的结果,并将它们连接到git远程集分支中。不确定这是否是作弊,但可以很好地进行更新,以展示如何使用git config实现这一点。这更好了,但我仍然觉得有些事情不对劲,我们必须使用这样的命令。这只比手动编辑配置文件好半步。好的,最后一种方法。用宫城先生的话说:最好的街区,不在那里
git config --unset remote.origin.fetch
git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --depth=1
git config --unset remote.origin.fetch <branch-name>
git config --unset remote.origin.fetch origin.<branch-name>$
git remote set-branches origin master
git remote set-branches origin master branch1 branch2 branch3 ...
git branch | sed s/'\* '// | xargs git remote set-branches origin