一次克隆所有分支

我试图用 linux 在我的机器上克隆一个完整的存储库

git clone <url>

然后我进入下载和打印文件的文件夹

git branch

在航站楼里。它只显示了 master,而没有显示远程存储库中的其他分支。如何克隆所有分支?

我知道对于远程中的每个分支我都可以单独使用

git checkout -b <name of local branch> origin/<name of remote branch>

除此之外还有别的办法吗?

78902 次浏览

它只显示了 master,而没有显示远程存储库中的其他分支。如何克隆所有分支?

分支本质上是指向提交的指针。执行 git clone(或 git fetch)时,将从远程存储库及其所有分支检索所有提交。

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

值得注意的是,标记确实以这种方式进行 没有操作,并且本地标记和远程标记之间没有区别。

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

克隆回购之后,运行 $ 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档案中加入以下内容:

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

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

enter image description here

git clone --bare <repository url goes here> .git

然后,在回购与其所有的分支克隆之后,然后做以下事情

git config --bool core.bare false


git reset --hard

要下载包含所有分支的完整存储库,请使用以下命令: git clone --mirror <URI>

这将创建一个名为 repository.git的文件夹,除非您给它一个不同的名称。

现在,这将获得原始存储库的完整克隆,但是因为它处于 bare=true模式,所以没有工作树。实际上,您拥有的是 .git文件夹,包括所有分支和内容。这是一种花哨的说法,即您不能直接访问这些文件,因为它们被隐藏在 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
  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