我试图用 linux 在我的机器上克隆一个完整的存储库
git clone <url>
然后我进入下载和打印文件的文件夹
git branch
在航站楼里。它只显示了 master,而没有显示远程存储库中的其他分支。如何克隆所有分支?
我知道对于远程中的每个分支我都可以单独使用
git checkout -b <name of local branch> origin/<name of remote branch>
除此之外还有别的办法吗?
它只显示了 master,而没有显示远程存储库中的其他分支。如何克隆所有分支?
分支本质上是指向提交的指针。执行 git clone(或 git fetch)时,将从远程存储库及其所有分支检索所有提交。
git clone
git fetch
但是,git branch默认情况下不显示远程分支。相反,它向您显示 本地分支,这些分支可能与远程系统上存在的分支有关系,也可能没有关系。如果运行 git branch --all,git 将报告它所知道的所有分支,包括本地分支和远程分支。
git branch --all
值得注意的是,标记确实以这种方式进行 没有操作,并且本地标记和远程标记之间没有区别。
这并不太复杂,非常简单和直接的步骤如下:
克隆回购之后,运行 $ cd myproject
$ cd myproject
这将显示所有远程分支。
$ 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
注意表示当前分支的 * 符号。
(1)在 git 本地存储库中,创建一个新的 sh 文件
touch getAllBranches.sh vi getAllBranches.sh
(2)在 getAllBranches.sh档案中加入以下内容:
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)在本地储存库检查结果:
例如,我使用存储库: https://github.com/donhuvy/spring-boot
如您所见,我已经将所有分支都提取到本地机器:
git clone --bare <repository url goes here> .git
然后,在回购与其所有的分支克隆之后,然后做以下事情
git config --bool core.bare false git reset --hard
要下载包含所有分支的完整存储库,请使用以下命令: git clone --mirror <URI>
git clone --mirror <URI>
这将创建一个名为 repository.git的文件夹,除非您给它一个不同的名称。
repository.git
现在,这将获得原始存储库的完整克隆,但是因为它处于 bare=true模式,所以没有工作树。实际上,您拥有的是 .git文件夹,包括所有分支和内容。这是一种花哨的说法,即您不能直接访问这些文件,因为它们被隐藏在 git 系统中(压缩等)。
bare=true
.git
为了使它成为一个“正常的”git 回购,我们需要在一个新的文件夹中复制这个 .git文件夹,这将是我们通常的回购文件夹:
Mkdir < repo 文件夹名 > Git < repo 文件夹名 >/. git Cd < repo 文件夹名 > Git 签出主机
注意,没有单一的本机 git 命令可以下载所有远程分支,因此最简单的方法是确保将所有提交都推送到原始分支,然后使用 this —— Mirror 选项重新下载整个存储库。
我发现这是克隆 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
git clone --bare https://repo.git projectName
cd projectName
git push --mirror https://repo.git
这样你的回购协议就完全一样了。
见: https://help.github.com/en/articles/duplicating-a-repository