我正在尝试使用Linux将整个存储库克隆到我的计算机上。 我使用了
git clone <url>
我随后进入下载的文件夹并输入以下内容
git branch
在终端中,它只显示了主分支而没有其他存储库中的分支。如何克隆所有分支?
我知道我可以分别使用每个远程分支。
git checkout -b <name of local branch> origin/<name of remote branch>
但除此之外还有其他的方法吗?
(1) 在git本地仓库中,创建一个新的sh文件。
touch getAllBranches.sh
vi getAllBranches.sh
(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
(3) 获取所有分支:
chmod +x getAllBranches.sh
sh getAllBranches.sh
(4)检查本地仓库中的结果:
git branch
例如,我使用存储库:https://github.com/donhuvy/spring-boot。这并不太复杂,非常简单明了的步骤如下:
克隆完仓库后,运行$ cd myproject
git branch -a
这将显示所有远程分支。
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
如果您想在远程分支上进行工作,您需要创建一个本地跟踪分支:$ git checkout -b experimental origin/experimental
通过以下命令验证您是否在所需的分支中:
$ git branch
输出结果将会是这样的:
*experimental
master
some branch2
some branch3
注意 * 符号表示当前分支。
git branch
后,我只看到master
和experimental
分支。还有其他人遇到同样的问题吗? - Brian-a
开关,即 git branch -a
。 - Jamie Sgit clone --bare <repository url goes here> .git
然后,在克隆所有分支的存储库之后,请执行以下操作:
git config --bool core.bare false
git reset --hard
--mirror
而不是--bare
。可以使用以下方式恢复远程分支:for branch in $( git branch -a | sed 's/^..//' ); do git checkout $branch; git branch --set-upstream-to=$branch $branch; done
(由于某种原因,$( git branch -a )
也会将当前目录中的文件添加到列表中,所以需要用到sed命令)。 - mechalynxgit reset --hard
告诉我:"fatal: this operation must be run in a work tree",对于 --bare
和 --mirror
都是如此。 - Kirillgit clone --bare https://your_repo_name.git your_local_dir/.git
,接下来的命令应该在 your_local_dir
中执行,这样就可以完成操作了。 - Ουιλιαμ Αρκευαgit branch -a
命令可以显示远程分支,如果你检出一个本地不存在但是远程存在的分支,Git 会自动为你创建一个本地分支。 - Xiong Chiamiovgit checkout -b experimental origin/experimental
。 - Xiong Chiamiov# 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
git clone --bare https://repo.git projectName
cd projectName
git push --mirror https://repo.git
这会使您的仓库完全相同。
参见:https://help.github.com/en/articles/duplicating-a-repository
git push --mirror
命令 - 它会用本地的分支列表覆盖远程的分支列表。如果你没有干净地完成步骤1和2,你很可能会破坏你的远程分支。 - smerggit clone --mirror <URI>
。这将创建一个名为repository.git
的文件夹,除非您给它一个不同的名称。bare=true
模式下,您没有工作树。实际上,您拥有的是.git
文件夹,包括所有分支和内容。这是一种花哨的说法,意思是您无法直接访问文件,因为它们被隐藏在git系统中(压缩等)。.git
文件夹移到一个新文件夹中,该文件夹将成为我们通常的repo文件夹:mkdir <repo folder name>
mv repository.git <repo folder name>/.git
cd <repo folder name>
git checkout master
请注意,没有单个本地git命令可以下载所有远程分支,因此最简单的方法是确保您已将所有提交推送到源,并使用此--mirror选项重新下载整个存储库。git checkout master
失败并显示fatal: this operation must be run in a work tree
。从.git\config
中删除bare=true
即可解决该问题。 - Dave the Sax
git branch -a
列出所有分支。另请参阅git branch --help
。 - Keith Thompson