2017-02-15 152 views
0

我正在使用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> 

后来如果我删除分支

git checkout master 
git branch --delete <branch-name> 

,推动删除远程

git push --delete origin <branch-name> 

我有一个问题。当我pullfetch我得到错误信息

致命:找不到远程裁判<分支名>

有对应git remote set-branches --add没有--remove选项让我怎么删除丢失科?是否需要编辑.git/config文件以删除该行

fetch = +refs/heads/<branch-name>:refs/remotes/origin/<branch-name> 

或者是否存在隐藏方式较少的方法?我很惊讶,推动分支删除不会修剪获取线。

+0

我不能重现确切的情况,所以不知道...但'git branch --unset-upstream '工作吗? –

+0

不幸的是 - 报告'致命的:分支''没有上游信息。我会尝试它在删除之前,但看看是否有帮助 – dumbledad

+0

是的,我最终转载了原来的错误(发现了一个步骤,我错过了),并看到它不是很容易修复。我会玩一下,让你知道我找到了什么。 –

回答

1

选项1:避免这个问题?

如果你没有明确地告诉git你想要获取哪个分支,这个问题是可以避免的。 (但如果你需要获取只有选定的一组分支,可能会更好跳过选项2)当你创建克隆你可以说你希望所有的分支

git clone --depth=1 --no-single-branch ... 

或者,如果你已经克隆和希望得到的树枝休息:从你的指令,而不是

git remote set-branches --add origin <branch-name> 

其配置获取寻找一个特定的分支,你可以

git config --unset remote.origin.fetch 
git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* 
git fetch --depth=1 

删除分支(本地和远程ly)不再导致问题。

(您可以使用更多的选择性的图形,但在情况下,你不希望“一切”可以打赌挑选个别分支机构。)

如果你已经有了存储库并按照上面描述的方式添加了一些分支,配置类似于我列出的应该修复它的命令。 (只需在第一次命令--unset-all替换--unset

选项2:修复问题

但是,如果你需要你的配置列出各个分支,你可以处理这些方法之一删除:

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

git config --unset remote.origin.fetch <branch-name> 

要注意的是<branch-name>被解释为正则表达式,如果多个值匹配,那么它将无法工作。所以,如果你得到关于多个匹配值的警告,你必须这样做

git config --unset remote.origin.fetch origin.<branch-name>$ 

或者你可以使用git remote set-branches

虽然没有明确git remote set-branches --remove或任何东西排序,您可以使用set-branches而不使用--add标志来完全重置远程分支列表。如果你没有太多的其他分支,这是可行的。例如,只给什么上面显示你可以做

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 

的进程。但是,将有一个问题,如果任何地方分支机构都没有,事实上,意味着源头轨道。

+0

我不喜欢这个,因为你需要构建分支列表。它看起来比编辑.git/config文件更难* – dumbledad

+0

取决于你的意思是“简单”。如果您想绕过瓷器并手动编辑文件,则可能会有更少的步骤。另一方面,瓷器可以保护您免于腐蚀您的回购(通常)。所以如果你不喜欢它,不要使用它;就像我说的我正在寻找更好的东西。但是请注意,构建分支列表并不是那么困难 - 只是可能很乏味。无论如何,你问的隐藏方式较少。到目前为止,只有一个。 –

+0

我还想到,我们可以编写一个bash单行程序来获取'git branch'的结果,并将它们连接成'git remote set-branches'。不知道这是否是作弊,但可以很好地工作 – dumbledad