Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git Hub一次克隆所有分支_Git_Github - Fatal编程技术网

Git Hub一次克隆所有分支

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,而不是远程存

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

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