我的主分支和开发分支在GitHub上被远程跟踪。如何克隆这两个分支?


当前回答

当您执行“gitclone”时git://location“,将获取所有分支和标记。

为了在特定远程分支上工作,假设它是源远程分支:

git checkout -b branch origin/branchname

其他回答

要创建存储在git主机(github/bitbucket/etc)中的所有分支+引用+标记+等的“完整”备份,请运行:

mkdir -p -- myapp-mirror
cd myapp-mirror
git clone --mirror https://git.myco.com/group/myapp.git .git
git config --bool core.bare false
git config --bool core.logAllRefUpdates true
git reset --hard # restore working directory

这是根据我从其他答案中学到的一切整理而成的。

然后,您可以使用此本地回购镜像转换到不同的SCM系统/git主机,也可以将其作为备份。它作为搜索工具也很有用,因为大多数git主机只搜索每个repo的“main”分支上的代码,如果您使用git log-s“specialVar”,您将看到所有分支上的所有代码。

注意:如果您想在日常工作中使用此回购,请运行:

git config --unset remote.origin.mirror

警告:如果你试图在日常工作中使用它,你可能会遇到奇怪的问题。如果您的ide/编辑器正在进行一些自动提取,您的本地主控器可能会更新,因为您做了gitclone--mirror。然后这些文件会出现在git暂存区。事实上,我有一种情况,我在当地的一个特色分支。。该分支没有提交,repo中的所有文件都显示在暂存区域中。只是疯子。

使用我的工具git_remote_branch(grb)。您需要在机器上安装Ruby)。它是专门为使远程分支操作非常容易而构建的。

每次它代表您执行操作时,都会在控制台上以红色打印。随着时间的推移,它们最终会进入你的大脑:-)

如果您不希望grb代表您运行命令,请使用“解释”功能。这些命令将打印到您的控制台,而不是为您执行。

最后,所有命令都有别名,以便于记忆。

注意,这是alpha软件;-)

以下是运行grb帮助时的帮助:

git_remote_branch version 0.2.6

  Usage:

  grb create branch_name [origin_server]

  grb publish branch_name [origin_server]

  grb rename branch_name [origin_server]

  grb delete branch_name [origin_server]

  grb track branch_name [origin_server]



  Notes:
  - If origin_server is not specified, the name 'origin' is assumed
    (git's default)
  - The rename functionality renames the current branch

  The explain meta-command: you can also prepend any command with the
keyword 'explain'. Instead of executing the command, git_remote_branch
will simply output the list of commands you need to run to accomplish
that goal.

  Example:
    grb explain create
    grb explain create my_branch github

  All commands also have aliases:
  create: create, new
  delete: delete, destroy, kill, remove, rm
  publish: publish, remotize
  rename: rename, rn, mv, move
  track: track, follow, grab, fetch

这个解决方案使我能够将一个存储库“复制”到另一个:

git merge path/to/source.git --mirror
cd source.git
git remote remove origin
git remote add origin path/to/target.git
git push origin --all
git push origin --tags

在目标存储库中,我可以看到与原始存储库相同的分支和标记。

好吧,当你克隆你的回购时,你有所有的分支。。。

如果你只是做git分支,它们是隐藏的。。。

所以,如果您想查看所有分支的名称,只需添加--all标志,如下所示:

gitbranch—all或gitbranch-a

如果你只是到分行结账,你就能得到你所需要的一切。

但是,如果你克隆后,其他人创建了分支,该怎么办?

在这种情况下,只需执行以下操作:

git获取

并再次检查所有分支。。。

如果您想同时取件和结账,可以执行以下操作:

git获取和git签出您的branch_name

还为您创建了下图,以简化我所说的内容:

独立存储库

如果要查找包含所有远程分支和提交日志的自包含克隆或备份,请使用:

git clone http://user@repo.url
git pull --all

gitbranch-a的接受答案仅显示远程分支。如果您尝试签出分支,除非您仍然具有对源服务器的网络访问权限,否则将无法签出。

信贷:加布·科普利(Gabe Kopley)建议使用git pull-all。

注:当然,如果您不再具有远程/源服务器的网络访问权限,那么远程/源分支将不会在存储库克隆中反映任何更新。它们的修订将反映您执行上述两个存储库克隆命令的日期和时间的提交。


Checkout a *local* branch in the usual way with `git checkout remote/origin/` Use `git branch -a` to reveal the remote branches saved within your `clone` repository.

要使用一个命令将所有克隆分支签出到本地分支,请使用以下bash命令之一:

$ for i in $(git branch -a |grep 'remotes' | awk -F/ '{print $3}' \ 
| grep -v 'HEAD ->');do git checkout -b $i --track origin/$i; done

OR

如果您的回购具有嵌套分支,则此命令还将考虑这一点:

for i in $(git branch -a |grep 'remotes' |grep -v 'HEAD ->');do \
basename ${i##\./} | xargs -I {} git checkout -b {} --track origin/{}; done

上述命令将将本地分支签入本地git存储库,其名称与remote/orging/<branchname>相同,并将其设置为--如果您再次重新获得对原始存储库服务器的网络访问并以通常方式执行git pull命令,则跟踪远程/orging服务器上远程分支的更改。