Git Hub一次克隆所有分支
我正在尝试使用linux将整个存储库克隆到我的机器上。我曾经Git Hub一次克隆所有分支,git,github,Git,Github,我正在尝试使用linux将整个存储库克隆到我的机器上。我曾经 git clone <url> 在候机楼。它只向我显示master,而不是远程存储库中的其他分支。如何克隆所有分支 我知道,对于遥控器中的每个分支,我都可以单独使用 git checkout -b <name of local branch> origin/<name of remote branch> git签出-b源/ 但除此之外还有别的办法吗 它只向我显示master,而不是远程存
git clone <url>
在候机楼。它只向我显示master,而不是远程存储库中的其他分支。如何克隆所有分支
我知道,对于遥控器中的每个分支,我都可以单独使用
git checkout -b <name of local branch> origin/<name of remote branch>
git签出-b源/
但除此之外还有别的办法吗
它只向我显示master,而不是远程存储库中的其他分支。如何克隆所有分支
分支本质上是指向提交的指针。在执行git克隆
(或git获取
)时,可以从远程存储库及其所有分支检索所有提交
但是,git branch
默认情况下不显示远程分支。相反,它显示您的本地分支,这些分支可能与远程上存在的分支有任何关系,也可能与远程上存在的分支没有任何关系。如果运行git branch--all
,git将报告它知道的所有本地和远程分支
值得注意的是,标记不是以这种方式运行的,本地标记和远程标记之间没有区别。这并不太复杂,非常简单和直接的步骤如下: 克隆回购协议后,运行
$cd myproject
git分支-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
请注意表示当前分支的*符号。(1)在git local Repository中,创建一个新的sh文件
touch getAllBranches.sh
vi getAllBranches.sh
(2) 将以下内容插入getallbranchs.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
# 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
(4) 在本地存储库中检查结果:
git branch
例如,我使用存储库:
如您所见,我已将所有分支提取到本地计算机:
要下载完整的存储库,包括所有分支,请使用以下命令:
git克隆--镜像
这将创建一个名为repository.git
的文件夹,除非您为其指定了其他名称
现在,这将获得原始存储库的完整克隆,但由于它处于bare=true
模式,因此没有工作树。实际上,您拥有的是.git
文件夹,包括所有分支和内容。这是一种奇特的说法,表示您无法直接访问这些文件,因为它们隐藏在git系统中(压缩等)
要使其成为“正常”的git repo,我们需要将此克隆设置为新文件夹中的.git
文件夹,这将是我们常用的repo文件夹:
mkdir
mv repository.git/.git
光盘
git签出主机
请注意,没有单个本机git命令可以下载所有远程分支,因此最简单的方法是确保将所有提交推送到源站,然后使用此--mirror选项重新下载整个存储库。我发现这是克隆git存储库和所有远程分支的简单解决方案:
chmod +x getAllBranches.sh
sh getAllBranches.sh
# 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克隆--barehttps://repo.git 项目名称
cd项目名称
git推送——镜像https://repo.git
请参阅:
git分支-a
列出所有分支。另请参见git分支--help
查看答案的可能重复部分有助于理解,但不会;回答一个真正的问题:如何获得所有分支,以便您可以在它们之间切换(对于我们git初学者)。选择的答案似乎可以做到这一点,但如果你有更好的想法,你会很乐意听到它。@DavidH一般来说,你没有什么特别需要做的git分支-a
将显示远程分支,如果您签出一个本地不存在但远程存在的分支名称,git将自动为您创建一个本地分支。我现在不是一个测试的好地方-我推断,如果我看到像“remotes/origin/Experiative”这样的分支,我可以简单地“git checkout Experiative”,它会像你上面说的那样做吗?是的,这是正确的。如果出于某种原因它不会(我认为git的旧版本以前没有这样做),您可以使用Amit在回答中提到的较长版本,即git checkout-b experimental origin/experimental
。两条注释:如果已经添加了上游问题,那么认为脚本应该是“git branch-a | grep remotes | grep-v HEAD | grep-v master | grep-v upstream”(删除上游分支)还有,为什么--track?不使用该选项不是更一致吗?也就是说,主节点的上游获取和合并将与任何分支相同?不需要。请参见下面熊的回答。这对我来说很有效,但使用--mirror
而不是--bare
。远程设备可以使用:来恢复中的分支$(git branch-a | sed's/^../');dogit checkout$branch;git branch-将上游设置为=$branch$branch;done
(由于某种原因,$(git branch-a)
也将当前目录中的文件添加到列表中,因此sed)--mirror
与--bare
--mirror
创建一个裸存储库的效果相同。--bare比--mirror更适合我,因为mirror创建的.git文件基本上是git创建的隐藏文件git reset--hard
告诉我:“致命:此操作必须在工作树中运行。”"对于--bare
和--mirror
@Kirill这两个分支,我也尝试过这个方法。但是我只看到master
和实验性的分支,在键入git branch
之后。还有谁有同样的问题吗?@Brian我肯定你现在已经找到了,但关键是-a
开关,即git branch-a代码>。这主要对我有效,除了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