我想为新项目(在VM上)创建一个新的共享git存储库。
我从git --bare init
运行/.../git/new_proj.git
,但未在.../git/new_proj.git/refs/heads
目录中创建主分支。
我也在我的目录上运行了sudo chmod 777 -R
,但它没有帮助,但在init
命令之后仍然没有创建主。
修改
我甚至尝试使用git init
(没有裸标志),但仍未创建主分支。
谷歌在这件事上没有多大帮助...
任何人都知道问题是什么?我错过了什么?谢谢!
答案 0 :(得分:36)
它已经在other answer so far的评论中了,但这是完全正常的:一个新的存储库,“裸”或不存在,没有提交,所以它也没有引用。
它有一个HEAD
,它是存储库(HEAD
目录)中名为.git
的文件,包含符号分支名称引用。如果您cat HEAD
,您将看到ref: refs/heads/master
,意味着新存储库是“在分支主服务器上”,即使分支主服务器尚不存在。同样,这是完全正常的事态。在这一点上,你被说成是“未出生的分支”。
当您向此空存储库添加一个或多个提交时,master
分支可以 - 如果它是一个裸存储库,您可能会通过git push
添加此提交,这可能不提供{{1}分支,所以我们不要说“确实”:-)虽然通常master
确实在那时出现,引用指向新的提交(或提交链的新提示)。
在任何仓库(裸露与否,再次),你可以“在”一个不存在的分支上。特别是,在普通仓库中,您可以这样做:
master
这会让你“$ git checkout --orphan newbranch
(通过将newbranch
写入ref: refs/heads/newbranch
),而不会实际创建 HEAD
,而{{1}一个“未出生的分支”。然后,下一次提交会导致newbranch
成立,并且该提交没有父提交(因此newbranch
部分):它是一个新的根提交。这与 首次提交时newbranch
相同。
如果您愿意,可以根据底层机制来看待它:当git创建新提交时,用于更新--orphan
的步骤如下: 1
master
档案的内容。HEAD
这样的象征性参考吗?如果是,请转到步骤4. HEAD
中的提交ID给出父级创建提交,并将新SHA-1写入ref: refs/heads/master
。停止,我们完成了。HEAD
或来自打包引用)。作为一个有趣的旁注,当refs被打包时,“活跃”的那些(就像你正在开发的那个分支,比如说HEAD
)会在.git/refs/heads/master
结束,但很快使用新值更新。这些新值仅在devel
文件中 :.git/packed-refs
文件保留.git/refs/heads/devel
条目,但它已过时(因此被忽略)。 (您不应该依赖于此:外部程序,例如shell脚本,应该使用.git/packed-refs
或refs/heads/devel
或git branch
来适当地读取和写入引用名称和SHA但是,有时候,能够直接进入并编辑refs是很有用的。可以把它想象成磁盘扇区的十六进制编辑器的现代版本。:-))
1 这都假设您没有创建合并提交。如果您在合并过程中 ,则存储库中的另一个文件(git update-ref
)会提供额外的合并父ID。
答案 1 :(得分:2)
裸git repos(通过发布git init --bare
创建的repos)将不会附加工作树。
您可以做的是转到repo /.../git/new_proj.git
并添加您创建的远程仓库:git remote add bare_origin <link to bare repo>
,然后尝试将您的提交推送到此bare_origin
回购表单。
另外,在创建裸存储库而不是普通存储库时,您有什么特别的原因吗?
答案 2 :(得分:2)
我有同样的问题并且已修复 - 首先使用git add命令之后使用commit命令最后使用git branch来显示你的分支 我的git版本1.9
git add -A
git commit -m "initialize"
git branch