在git-book中,它说
“origin”并不特别
就像分支名称“master”在Git中没有任何特殊含义一样,“origin”也没有。 虽然“master”是运行git init时启动分支的默认名称,这是它被广泛使用的唯一原因,但“origin”是运行git clone时远程的默认名称。如果你改为运行git clone -o booyah,那么你将把booyah / master作为你的默认远程分支。
这意味着,我们可以将默认分支名称用作 main 或 main-branch 或类似的东西。我在man git-init
中没有看到任何使用不同默认分支名称初始化repo
的选项。
Github显示如何在其设置页面中设置默认分支名称。但我不是在谈论如何在任何特定的 git托管网站中设置它。我只是严格询问git,而不是针对任何特定的 git托管网站。
有办法吗?
答案 0 :(得分:24)
如何使用默认分支名称而不是“
master
”创建Git存储库?
您将使用Git 2.28(2020年第3季度):现有存储库中主要分支的名称以及新创建存储库中第一个分支所使用的默认名称是可配置的,以便我们最终可以自行退出硬编码的“ master
”。
还有Aug. 2020 from GitHub的提醒:
在2020年10月1日,如果您尚未更改用户,组织或企业的新存储库的默认分支,它将自动从
master
更改为main
< / strong>。
您可以随时选择退出此更改:
- 对于用户,在https://github.com/settings/repositories页上
- 对于组织所有者,请在
https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults
页上- 对于企业管理员,在
https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges
页上此更改是GitHub为支持要重命名其默认分支的项目和维护人员而进行的众多更改之一。
要了解有关我们正在进行的更改的更多信息,请参见github/renaming。
但回到Git本身:(2020年第三季度2.28)
请参见commit 508fd8e的Đoàn Trần Công Danh (sgn
)(2020年6月29日)。
请参阅commit 0068f21,commit a471214,commit 0cc1b47,commit 32ba12d,commit 6069ecc,commit f0a96e8,commit 4d04658(2020年6月24日)和{ {3}}(2020年6月23日)作者:commit 489947c。
请参见Johannes Schindelin (dscho
)的commit 8747ebb(2020年6月24日)。
(由Don Goodman-Wilson (DEGoodmanWilson
)在Junio C Hamano -- gitster
--中合并,2020年7月6日)
commit 11cbda2:允许为新存储库指定初始分支名称
签名人:Johannes Schindelin
越来越多的项目和公司希望更改其存储库的主要分支名称(有关背景,请参见
init
)。要更改新存储库的分支名称,当前唯一自动执行的方法是复制Git的所有模板目录,然后将所需的默认分支名称硬编码到
.git/HEAD
文件中,然后进行配置init.templateDir
指向那些复制的模板文件。为减少此过程的麻烦,让我们介绍一个新选项:
--initial-branch=<branch-name>
。
git init --initial-branch=hello myLocalRepo
# or
git config --global init.defaultBranch hello
git init myLocalRepo
并且:
Mislav Marohnić's tweet:允许通过配置为初始分支名称设置默认值
帮助人:约翰尼斯·辛德林
帮助人:德里克·斯托利
签名人:Don Goodman-Wilson
我们刚刚引入了命令行选项
--initial-branch=<branch-name>
,以允许使用与硬编码分支不同的初始分支来初始化新存储库。要允许用户更永久地覆盖初始分支名称(即,不必为每个
git init
调用手动指定名称),我们来介绍init.defaultBranch
的配置设置。
注意:关于合并提交消息的init
已在Git 2.29中恢复,请参见“ commit 489947c”。
init.defaultBranch
设置保持不变。
这会影响子模块:
how can I customize git's merge commit message?:由于缺少遥控器而回退到遥控器的HEAD。
帮助者:Philippe Blain
签名人:Johannes Schindelin
未配置
remote.<name>.branch
时,submodule
当前回退到使用分支名称master
。
但是,更好的主意是使用远程HEAD
:在运行合理最新Git版本的所有Git服务器上,symrefHEAD
指向main分支。注意:t7419证明存在可能个用例,它们可以期望
git submodule update
将子模块更新到远程master
分支,即使远程HEAD
指向另一个分支。
可以说,此修补程序使行为更直观,但极有可能在晦涩的设置中导致回归。即使这样,也可以在没有更长过渡期的情况下解决此问题:
git submodule update --remote
命令并不是很常见。- 运行此命令时,当前Git的行为完全令人困惑,除非远程存储库的当前分支为
master
(在这种情况下,建议的行为与旧行为匹配)。- 如果用户由于更改的行为而遇到退步,则此修复实际上是微不足道的:将
submodule.<name>.branch
设置为master
将恢复旧的行为。
请注意,在Git 2.29(2020年第四季度)中,contrib/
中的测试已根据最近对fmt-merge-msg
的更改进行了调整。
请参见git submodule update --remote
的commit b87528c(2020年8月3日)。
(由Emily Shaffer (nasamuffin
)在Junio C Hamano -- gitster
--中合并,2020年8月10日)
commit 83b8250:
subtree
:调整测试以更改fmt-merge-msg
”签名人:艾米莉·谢弗
这将还原
Revert "contrib
。在commit 508fd8e8baf3e18ee40b2cf0b8899188a8506d07(
fmt-merge-msg
:再次允许合并目标)中,我们得到了与“master
”进行合并的行为,默认情况下,不包含“ {{1 }}“合并消息的末尾。不再需要此测试修复程序。
也:
使用Git 2.29(2020年第四季度),更新测试以从其中删除单词“ into 'master'
”。
请在6e6029a8前参阅commit f33f2d3,commit b6211b8(2020年9月26日)和commit 432f5e6,commit 5a0c32b,commit 659288c(2020年9月21日) 。
(由Johannes Schindelin (dscho
)在Junio C Hamano -- gitster
--中合并,2020年10月5日)
commit 58138d3:避免更改
master
分支名称签名人:Johannes Schindelin
master
一词有着悠久的历史,不断提醒着种族不公。 Git项目不希望这种情况永久存在,并且已经开始避免这种情况。测试套件对默认分支以外的分支使用此名称的变体。除了t3200,我们在上一提交中刚刚解决了这一问题,这些实例可以自动重命名,因为它们不需要在测试脚本之外进行任何更改,所以让我们这样做。
由于触摸的分支与默认分支几乎没有关系(如果有的话),我们选择使用完全独立的命名方案:
master
(不能为topic_<number>
,因为t5515使用topic-<number>
机械设备,该机械设备在内部使用shell变量,其名称不能包含破折号。此技巧是由以下(GNU)sed调用执行的:
test_oid
而且,仍然使用Git 2.29:
请参见tests
的commit 538228e,commit a15ad5d(2020年10月8日)。
(由Johannes Schindelin (dscho
)在Junio C Hamano -- gitster
--中合并,2020年10月8日)
commit 62564ba:避免使用
$ sed -i 's/master\([a-z0-9]\)/topic_\1/g' t/t*.sh
作为引用名称签名人:Johannes Schindelin
为准备将
main
的备用版本更改为init.defaultBranch
的补丁系列,在此测试脚本中,请勿使用main
作为参考名称。否则,想要捕获这些引用的
t1415
(git for-each-ref ... | grep main
)也会意外地捕获main
。由于所涉及的ref是本地的工作树(即每个工作树都有自己的ref,就像
refs/heads/main
一样),并且由于测试用例已经使用了名为“HEAD
”的辅助工作树,因此,对于这些引用,请使用名称“second
”。与此同时,调整当它们表示“工作树”时涉及“回购”的测试标题。
答案 1 :(得分:16)
自 Git 2.28 (于2020年7月27日发布)以来,引入了一个新的配置选项$ kubectl -n my-namespace --as="system:serviceaccount:my-account:default" auth can-i deletecollection pipelines.tekton.de
yes
,以取代硬编码的术语*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// initialize the serial communications:
Serial.begin(9600);
}
void loop() {
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
。
默认设置为
#include<iostream>
#include<vector>
using namespace std;
void sort(vector <int> &v, int i, int j, int end2)
{
vector <int> v1;
int start1=i, start2=j, end1=j;
while((start1<end1)||(start2<end2))
{
if((start1<end1)&&(start2<end2))
{
if(v[start1]<v[start2])
{
v1.push_back(v[start1]);
start1++;
}
else if (v[start1]==v[start2])
{
v1.push_back(v[start1]);
start1++;
start2++;
}
else
{
v1.push_back(v[start2]);
start2++;
}
}
else if((start1<end1)&&(start2>=end2))
{
v1.push_back(v[start1]);
start1++;
}
else if((start1>=end1)&&(start2<end2))
{
v1.push_back(v[start2]);
start2++;
}
}
int s=i;
while(s<end2)
{
v[i]=v1[i];
i++;
}
}
void mergeSort(vector <int> &v, int s)
{
int low, end2, high;
for(int k=2;k<=s;k=k*2)
{
for(int i=0;i+k-1<s;i=i+k)
{
low=i;
high=i+k;
end2=i+2*k;
sort(v, low, high, end2);
}
}
}
int main()
{
vector <int> v;
int n;
cout<<"Enter the no. of elements you want to sort\n";
cin>>n;
int d;
cout<<"Enter the values\n";
for(int i=0;i<n;i++)
{
cin>>d;
v.push_back(d);
}
int s= v.size();
mergeSort(v, s);
for(int i=0;i<n;i++)
{
cout<<v[i]<<"\t";
}
cout<<endl;
}
!
用户可以使用以下命令覆盖配置变量的默认值:
init.defaultBranch
阅读git doc章节以获取更多详细信息Introducing init.defaultBranch
答案 2 :(得分:13)
正如您所注意到的,分支名称git init
没有参数,因此必须执行两个命令。
git init
git checkout -b trunk
这将创建一个新的存储库,其中trunk
作为当前分支而不是master
。分支master
实际上并不存在 - 分支在至少有一次提交之前不会被创建。在创建分支之前,分支仅存在于.git/HEAD
中,这解释了当您切换到master
时trunk
分支将消失的原因。
如果您已提交,则可以改为运行git branch -m
:
git init
touch file.txt
git add file.txt
git commit -m 'commit 1'
git branch -m trunk
此分支一旦创建,就会将分支从master
重命名为trunk
。
这似乎有点笨拙,因为机制不同,取决于存储库是否为空,但它是否有效。
答案 3 :(得分:5)
您可以间接地将git init
配置为使用不同的默认分支:当前分支由HEAD
定义,它只是一个文本文件,告诉git哪个ref是当前的。< / p>
使用init.templateDir
,您可以要求git init
使用另一个:
# ~/.config/git/config or ~/.gitconfig
[init]
templateDir = ~/.config/git/template/
并在~/.config/git/template/HEAD
中添加一行(+换行符):ref: refs/heads/main
(默认为分支main
)。
创建存储库时,templateDir
的全部内容将复制到.git
目录;默认值(此处为/usr/share/git-core/templates
)包含一些示例挂钩和其他文件,但您可以使用新模板目录来设置默认挂钩,例如。
$ tree /usr/share/git-core/templates
/usr/share/git-core/templates
├── branches
├── description
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ └── update.sample
└── info
└── exclude
3 directories, 13 files