git clone --bare不包括分支主服务器

时间:2012-06-19 22:35:52

标签: git

我正在尝试建立用于创建新项目的工作流程,以及通过Git将旧项目设置为版本控制。除了一步之外,它最终都是有意义的。当我创建一个新项目时,在其中初始化Git并进行初始提交,然后执行git clone --bare ./myproject //myserver/myshare/myproject.git。然后我设置了一个遥控器git remote add origin //myserver/myshare/myproject.git。这些似乎工作得很好。但是,当我执行git branch -a时,它不会显示遥控器上有一个主分支。

我现在解决这个问题的方法是,我只是git clone //myserver/myshare/myproject.git到另一个位置并且已经设置了遥控器,并且遥控器上存在主分支。我不知道会出现什么问题,特别是因为看起来唯一不同的是设置遥控器的方式。

提前致谢!

2 个答案:

答案 0 :(得分:2)

没有错。从git clone手册页:

   --bare
       Make a bare GIT repository. That is, instead of creating <directory> and placing the administrative files in <directory>/.git, make the <directory>
       itself the $GIT_DIR. This obviously implies the -n because there is nowhere to check out the working tree. Also the branch heads at the remote are
       copied directly to corresponding local branch heads, without mapping them to refs/remotes/origin/. When this option is used, neither remote-tracking
       branches nor the related configuration variables are created.

裸存储库不会将master提交指针映射到refs/remotes/origin/master,但它们不必。 Bare repos是vital when setting up remotes that others might push to or pull from,但是they aren't where you do day-to-day dev work.听起来你有一个origin。除非您正在设置另一个遥控器,否则请坚持使用git clone //myserver/myshare/myproject.git作为本地存储库。

答案 1 :(得分:0)

来自 git branch 的帮助:

<块引用>

-a, --all : 列出远程跟踪和本地分支

-l, --list : 列出分支名称

-r, --remotes : 作用于远程跟踪分支

似乎没有列出远程存储库上的分支的选项。但是如果分支在裸克隆期间位于您的本地存储库中,则该分支就在那里。诀窍是注意这里的措辞。 远程跟踪git branch -a 的作用是向您展示您可能已设置的用于跟踪远程分支的任何分支以及您的本地分支 - 顺便说一下,{{1}命令可以。这只是设置了一个遥控器。没有分支跟踪

所以,为了真正做你真正尝试的事情,你需要这样的东西:

git remote add <name> <url>

或者您可以在 //myserver/myshare/myproject.git/refs/heads 或 //myserver/myshare/myproject.git/packed-refs 中检查以确认分支存在。

最后,要设置共享存储库,而不是要处理的存储库,(somehow)cd //myserver/myshare/myproject.git && git branch --list 是正确的方法。如果没有 git clone --bare 选项,克隆 git 后会检出克隆存储库的 HEAD 分支的工作树,这在服务器上通常是不需要的,也没有意义。