我想我说的都是正确的。
我有一个带Git的登台服务器,我的伙伴和我从我们当地克隆的那个仓库推动对Git仓库的更改,当我们准备公开的时候,我们标记它就是全部,但是我必须做一个git reset --hard
来将服务器上的实际文件更新为HEAD,这对我来说有点奇怪。
我认为这个问题可能是对git如何运作的根本误解。通常我将我的代码分支到我的本地仓库,处理它,然后将其合并到主仓库,然后git push
,这是正确的吗?
对不起,对于git来说,我是一个新手,任何使用远程git repos的资源都将非常感谢,谢谢!
答案 0 :(得分:7)
听起来你正在推动服务器上的非裸仓库。当您推送到仓库时,会更改仓库的内部状态,但不会更新签出的文件,这就是您必须执行git reset --hard
(或git checkout
)签出更新副本的原因的文件。由于这个原因,建议只推送到一个裸仓库。您可以使用git --bare init
或git clone --bare
创建一个裸仓库。
答案 1 :(得分:2)
扎克,
我认为问题在于您的远程数据库不是裸存储库(即,它有一个与之关联的工作树)。您应该从不推入非裸存储库,因为这会更新索引/缓存,但不会更新工作树。 (非裸)存储库工作树仅在运行“git reset --hard”时才能正确更新,因为此命令会更改工作树状态以反映上次提交的状态,即您刚推送的提交。
应使用“--bare”标志创建远程存储库,即,您应该通过调用来创建存储库:
$ git init --bare
然后您可以正确地将更改推送到其中。
我描述了使用多个存储库here的开发工作流程,而我在本文的第二部分提供了脚本/别名/提示。
答案 2 :(得分:1)
优秀的资源是Scott Chacon的Pro Git书。它可以在http://progit.org/book
在线找到答案 3 :(得分:1)
我不完全理解您的问题,但我可以向您推荐this workflow,这对我们的团队非常有用。在this other post中,您将找到自动化脚本的脚本,但我发现最好在开始时运行完整的git命令,以使流程内部化。
此外,关于托管存储库和gitosis的this resource非常好。这个实用的链接,加上读一本关于git的书,对我们能够快速采用git非常有用。