跟踪所有远程git分支作为本地分支

4 浏览
0 Comments

跟踪所有远程git分支作为本地分支

将单个远程分支追踪为本地分支非常简单。

$ git checkout --track -b ${branch_name} origin/${branch_name}

将所有本地分支推送到远程,并在需要时创建新的远程分支也很容易。

$ git push --all origin

我想做相反的操作。如果我有X个远程分支在一个源中:

$ git branch -r 
branch1
branch2
branch3
.
.
.

我是否可以一次性为所有这些远程分支创建本地追踪分支,而不需要手动创建每个分支?像这样:

$ git checkout --track -b --all origin

我已经谷歌过和阅读过文档,但目前还没有找到解决方法。

0
0 Comments

追踪所有远程git分支作为本地分支的原因是为了方便在本地管理和操作远程分支。通过追踪远程分支,我们可以在本地创建一个与远程分支对应的本地分支,并且可以直接在本地进行代码的修改、提交和推送等操作,而不需要每次都通过远程仓库进行操作。

在git版本1.9.1之后,可以使用以下bash脚本来追踪所有远程分支:

for i in `git branch -a | grep remote | grep -v HEAD | grep -v master`; do git branch --track ${i#remotes/origin/} $i; done

这段脚本通过遍历远程分支的列表,创建一个与远程分支对应的本地分支,并将其与远程分支进行关联。

然而,在git版本1.9.1之前,上述脚本会出现以下问题:

1. 所有创建的分支都会追踪主分支(master)。

2. 所有创建的本地分支名称都会以"origin/"作为前缀。

为了解决这些问题,可以使用以下bash脚本来追踪所有远程分支:

for remote in `git branch -r `; do git branch --track $remote; done

这段脚本与之前的脚本类似,只是省略了对远程分支名称的处理,从而避免了上述问题的发生。

如果希望更新追踪分支的代码(假设本地追踪分支没有进行过修改),可以使用以下bash脚本:

for remote in `git branch -r `; do git checkout $remote ; git pull; done

这段脚本通过遍历远程分支的列表,切换到每个远程分支并进行代码的拉取操作。

需要注意的是,在执行上述脚本时,可能会出现一些模棱两可的引用警告,但是git似乎更喜欢本地分支,因此可以忽略这些警告。

总结起来,追踪所有远程git分支作为本地分支的原因是为了在本地方便地管理和操作远程分支。通过使用适当的bash脚本,我们可以轻松地创建与远程分支对应的本地分支,并进行代码的更新和提交等操作。

0
0 Comments

追踪所有远程的git分支作为本地分支的问题出现的原因是想要将远程的git分支作为本地分支进行追踪。解决方法是使用for循环来创建追踪分支。

具体的解决方法如下:

1. 首先确认本地是否已经追踪了除了master之外的其他分支,可以使用git branch -l或者git branch命令来确认。

2. 使用以下一行命令来创建追踪分支:for i in $(git branch -r | grep -vE "HEAD|master"); do git branch --track ${i#*/} $i; done

3. 确认追踪分支是否创建成功,可以使用git branch命令来确认。

4. 如果需要删除追踪分支,可以使用git br -D命令来删除分支。

5. 使用git br -vv命令可以确认追踪分支的详细信息。

6. 如果不想使用for循环,可以使用git checkout --track命令来创建追踪分支。

7. 针对Windows系统,需要根据具体情况进行相应的操作。

参考资料:

- 10.1. Manipulating Strings - Advanced Bash Scripting Guide

- 3.5 Git Branching - Remote Branches

这个方法在git版本2.3.2上测试通过。

0
0 Comments

跟踪所有远程git分支作为本地分支的问题出现的原因是:创建的所有分支的名称都以"origin/"开头。如果您只想要最后部分(最后一个/之后的部分)作为您的结果分支名称,请使用以下命令:for remote in `git branch -r | grep -v /HEAD`; do git checkout --track $remote ; done 这样做还有一个好处,就是不会给您带来任何关于模糊引用的警告。Git不会将"origin"添加到本地跟踪分支名称中。实际上,对我来说,它的行为与我在OSX 10.6.4上所说的完全一样,使用的是git 1.7.2.2(截至本评论时的最新稳定版本)。Otto甚至提到了模糊引用名称警告-如果"origin/"不是每个本地分支名称的一部分,这些警告就不需要存在。在运行Otto的命令后,这是'git branch'输出的结果:[master, origin/HEAD, origin/charts, origin/master, origin/production, origin/staging]。而我的命令是:[charts, master, production, staging]。 +1 这正是我所需要的东西。我很惊讶它并不是git的一个功能。所以现在我有了所有的git.git分支,我可以看看可能涉及的内容! +编辑:找到了解释的文章.gmane.org/gmane.comp.version-control.git/112575 我同意-这比当前"接受"答案更好。当git输出类似origin/HEAD -> origin/development这样的内容时,这个方法不起作用,因为>字符会传递给git checkout。 是的,伙计,如果您不使用master作为默认分支,您需要自定义它。然而,master是压倒性的惯例。而不是grep -v master,为什么不使用grep -v /HEAD?这似乎可以过滤掉默认分支,而无需自定义。不确定checkout是否是理想选择,特别是如果您有很多分支。我使用了这个答案和Otto的答案的组合:for branch in git branch -r | grep -v /HEAD; do git branch --track ${branch#origin/} $branch ; done

0