Git Hub一次克隆所有分支

Ana*_*shi 39 git github

我正在尝试使用linux将整个存储库克隆到我的机器上.我用了

git clone <url>   
Run Code Online (Sandbox Code Playgroud)

然后我进入了下载和输入的文件夹

git branch 
Run Code Online (Sandbox Code Playgroud)

在终端.它只显示我的主人,而不是显示在远程存储库中的其他分支.如何克隆所有分支?

我知道对于遥控器中的每个分支我都可以单独使用

git checkout -b <name of local branch> origin/<name of remote branch>
Run Code Online (Sandbox Code Playgroud)

但除此之外有什么办法吗?

nhu*_*uvy 48

(1)在git local repostitory中,创建一个新的sh文件

touch getAllBranches.sh
vi getAllBranches.sh
Run Code Online (Sandbox Code Playgroud)

(2)将以下内容插入getAllBranches.sh文件:

for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done
Run Code Online (Sandbox Code Playgroud)

(3)获得所有分支:

chmod +x getAllBranches.sh    
sh getAllBranches.sh
Run Code Online (Sandbox Code Playgroud)

(4)检查本地存储库的结果:

git branch
Run Code Online (Sandbox Code Playgroud)

例如,我使用存储库:https://github.com/donhuvy/spring-boot

如您所见,我已经将所有分支都提取到本地机器:

在此输入图像描述

  • 无法理解有人会否决这个答案! (2认同)

Ami*_*pta 38

这不是太复杂,非常简单和直接的步骤如下:

克隆回购后,运行 $ cd myproject

git branch -a 这将显示所有远程分支.

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
Run Code Online (Sandbox Code Playgroud)

如果要在远程分支上工作,则需要创建本地跟踪分支:

$ git checkout -b experimental origin/experimental
Run Code Online (Sandbox Code Playgroud)

通过以下命令验证您是否在所需的分支中;

$ git branch
Run Code Online (Sandbox Code Playgroud)

输出将是这样的;

*experimental
master
some branch2
some branch3 
Run Code Online (Sandbox Code Playgroud)

注意表示当前分支的*符号.


Ame*_* Ra 13

git clone --bare <repository url goes here> .git
Run Code Online (Sandbox Code Playgroud)

然后在repo克隆其所有分支后,执行以下操作

git config --bool core.bare false

git reset --hard
Run Code Online (Sandbox Code Playgroud)

  • `git reset --hard` 告诉我:对于 `--bare` 和 `--mirror` 来说,“致命:此操作必须在工作树中运行” (3认同)
  • 这对我有用,但使用`--mirror`而不是`--bare`.`在$分支(GIT分支-a | sed中的/^..//');:遥控器可以使用恢复 做git checkout $ branch; git branch --set-upstream-to = $ branch $ branch; 完成``(由于某种原因`$(git branch -a)`将当前目录中的文件添加到列表中,因此sed) (2认同)
  • “致命:此操作必须在工作树中运行”消息是因为您没有正确应用以更清晰的方式编写的命令应该是:“git clone --bare https://your_repo_name.git your_local_dir/.git” ,应该在`your_local_dir`中执行以下命令,就完成了。 (2认同)

Xio*_*iov 12

它只显示我的主人,而不是显示在远程存储库中的其他分支.如何克隆所有分支?

分支基本上是提交的指针.当您执行git clone(或a git fetch)时,您将从远程存储库及其所有分支中检索所有提交.

但是,git branch默认情况下不显示远程分支.相反,它会向您显示您的本地分支,这些分支可能与远程上存在的分支有任何关系.如果你运行git branch --all,git将报告它所知道的所有分支,包括本地和远程.

值得注意的是,标签以这种方式运行,并且本地标签和远程标签之间没有区别.

  • @DavidH一般来说,你不需要做什么特别的事情; `git branch -a`将显示远程分支,如果你检查一个本地不存在的分支名称,但在远程分支名称,git会自动为你创建一个本地分支. (3认同)
  • 您的回答有助于理解,但无济于事。回答有关如何获得所有分支的真实问题,以便您可以在它们之间进行切换(对于git初学者而言)。选定的答案似乎可以做到,但是如果您有更好的主意,不妨听听。 (2认同)
  • 是的,这是正确的.如果由于某种原因它没有(我认为旧版本的git不习惯这样做),你可以使用Amit在他的回答中提到的更长版本的版本,即`git checkout -b experimental origin/experimental` . (2认同)

Str*_*ker 8

我发现这是克隆 git 存储库和所有远程分支的简单解决方案:

# Clone remote repository and all branches
git clone --mirror https://github.com/test/frontend.git frontend/.git

# Change into frontend directory
cd frontend

# Update git config
git config --unset core.bare

# Checkout master branch
git checkout master
Run Code Online (Sandbox Code Playgroud)


小智 5

  1. git clone --bare https://repo.git projectName
  2. cd projectName
  3. git push --mirror https://repo.git

这使得您的存储库完全相同。

请参阅: https: //help.github.com/en/articles/duplicating-a-repository

  • 使用“git push --mirror”时要非常小心 - 它会用本地的任何内容覆盖远程分支列表。如果您没有彻底完成步骤 1 和 2,您可能会毁掉您的遥控器。 (2认同)