我想为一个新项目(在VM上)创建一个新的共享git存储库。
我git --bare init
从跑来的/.../git/new_proj.git
,但未在.../git/new_proj.git/refs/heads
目录中创建master分支。我也在sudo chmod 777 -R
目录上运行,但没有帮助,在init
命令之后仍然没有创建主目录。
编辑:我什至尝试使用git init
(没有裸标志),但仍未创建master分支。
Google在这件事上帮不上什么忙...
有人知道是什么问题吗?我缺少什么?谢谢!
到目前为止,它已经在另一个答案的注释中了,但这完全是正常的:新的存储库,无论是否“裸”,都没有提交,因此也没有引用。
它确实有一个HEAD
,它是HEAD
在存储库(.git
目录)中命名的文件,其中包含符号分支名称引用。如果您cat HEAD
会看到ref: refs/heads/master
,则意味着即使分支母版尚不存在,新的存储库也位于“分支母版上” 。同样,这是完全正常的状态。据说此时您处于“未出生的分支”上。
当您添加一个或多个提交到这个空库,该master
分支可以,如果它是一个裸露的回购协议,你可能会添加此通过git push
它可以不提供master
分支,所以我们不能说“不” :-)虽然平时master
做的那样-来在这一点上已经存在,引用指向新的提交(或一系列提交的新提示提交)。
在任何存储库中(无论是否裸露),您都可以“位于”不存在的分支上。特别是,在普通回购中,您可以执行以下操作:
$ git checkout --orphan newbranch
其中“关于”把你newbranch
(通过编写ref: refs/heads/newbranch
成HEAD
),而不实际创建 newbranch
的是,制作newbranch
一个“未出生的分支”。然后,下一个提交导致newbranch
存在,并且该提交没有父提交(因此是该--orphan
部分):这是一个新的根提交。这是同样的方式master
进入上存在它的第一次提交。
如果愿意,可以从基本机制的角度进行研究:git创建新提交时,用于更新的步骤HEAD
如下:1
HEAD
文件内容。ref: refs/heads/master
吗?是,执行步骤4。HEAD
并向中写入新的SHA-1 HEAD
。停,我们完成了。.git/refs/heads/master
,或从打包的引用中)。有趣的是,当ref被打包时,“活动”的(例如,您正在开发的任何分支devel
)例如进入.git/packed-refs
,但是会迅速用新值更新。这些新值仅在.git/refs/heads/devel
文件中存在:.git/packed-refs
文件保留一个refs/heads/devel
条目,但是它是陈旧的(因此被忽略)。(您不应该依赖于此:外部程序,例如shell脚本,应该使用git branch
或git update-ref
或git symbolic-ref
酌情使用读写ref-names和SHA-1值。但是,有时候,去in并直接编辑引用。将其视为相当于磁盘扇区的十六进制编辑器的现代版本。:-))
1所有这些都假设您没有创建合并提交。如果您正在合并,存储库(.git/MERGE_HEAD
)中的另一个文件将提供额外的合并父ID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句