我正在尝试将我的master
分支重命名为development
:
git checkout -b development master
git push -u origin development
git branch -d master
git push --delete origin master
git remote prune origin
工作正常。但是,如果我尝试克隆我的存储库,我将进入一个空文件夹,并且需要执行git checkout development
。
克隆时如何将development
设置为默认分支?
答案 0 :(得分:1)
要添加到Schleis' answer,请在使用git clone
运行-b <branchname>
时告诉您的Git最后一步。请记住,git clone url dest
实际上是此六步命令序列的缩写:
mkdir dest
,以创建一个新的空目录。如果省略 dest
参数,Git将根据您提供的 url
构建一个参数。 (如果命名现有目录,则该目录必须为空。)其余操作将像通过cd dest
一样在此目录中运行,尽管这不会影响您的shell。
git init
:这将在否则为空的目录中创建一个新的空存储库.git
目录。
git remote add origin url
:这会将名为origin
的远程添加到此新的空存储库的配置中。 (如果需要,可以通过origin
的{{1}}选项选择-o
以外的其他名称。)如果使用git clone
,则单个分支有效地通过这点。 (我之所以说“有效”,是因为该过程的这一部分内置于--single-branch
命令本身中。)
设置您在git clone
命令中指定的所有其他git config
命令(在单词git clone
之后添加-c
选项:clone
选项之前单词-c
可能适用于克隆过程,但未在克隆中的中设置。
运行clone
(或您选择的任何远程名称)。这将获取在URL上发布的所有提交。它还从另一个Git获取分支和标记名称(和其他引用)的列表;这些分支名称将成为您的远程跟踪名称,此时,这些标记名称通常也将复制到您的存储库中。 1
最后,您的Git选择一些分支名称,以有效地传递到git fetch origin
。您的Git转到git checkout
的哪个分支名称?答案取决于您是否提供git checkout
标志。
如果您提供-b
,您的Git将尝试-b foo
。这取决于是否存在git checkout foo
,它是在第5步中由Gem的origin/foo
创建的。如果您提供foo
,您的Git将尝试进行-b master
。但是,如果您不提供任何 git checkout master
,则您的Git会问他们的 Git哪个分支他们推荐。
在这种情况下,发生的情况是他们的Git正在推荐-b
,或者不推荐任何东西。我们无法从您所发布的内容中分辨出是哪种情况,但这无关紧要,因为它们没有master
。如果他们建议您的Git使用他们的master
来制作您的master
,这将失败:他们没有master
。如果他们根本没有提出建议,您的Git会假设,它最后应该使用master
,并会从他们的master
寻找您的origin/master
,但是你不会有。
因此,无论此时发生什么情况,您的Git都没有要检出的分支。不过,您确实有master
,是从他们的origin/development
复制而来的。因此,您可以运行development
,它四处张望,看到您没有git checkout development
,四处张望,看到您要做有development
,然后做您想要的事情。
克隆后如何将开发设置为默认分支?
您可以尝试让他们的 Git推荐该名称。
要以传统方式(非GitHub上的方式)执行此操作,请登录服务器,导航至origin/development
存储库(无论位于何处),然后运行:
--bare
,现在他们的Git会推荐git symbolic-ref HEAD refs/heads/development
。
要在GitHub上执行此操作,请参见GitHub's instructions。要使用其他网络托管服务来做到这一点,请参阅其说明,无论它们在哪里。
1 仅当分支或标签名称中记录的对象ID也存在时,分支或标签名称才能存在。因此,如果您限制要复制的提交集,则您的Git可能不得不省略一些名称。例如,如果它们的标签之一(例如development
)指向您通过v0.1
和/或--single-branch
故意忽略的提交,则不能使用该标签。如果他们的分支机构--shallow
指向您因为您说debug
而未执行的某个提交,那么您将没有--single-branch foo
。请注意,origin/debug
意味着--shallow
。
答案 1 :(得分:0)
默认情况下,git将要使用master
,大多数存储库将使用此分支作为“稳定”。因此,一般而言,您会希望有这种行为。
但是,在git clone命令中,有一个选项-b <branchname>
将签出特定分支或仅克隆命名分支。
https://git-scm.com/docs/git-clone
因此,在您的情况下,您希望将克隆命令更改为git clone -b development <repo>