【问题标题】:Git push only for bare repositories?Git推送仅适用于裸存储库?
【发布时间】:2011-01-10 00:04:47
【问题描述】:

当我尝试 'git push origin master' 到我的外部磁盘上的远程存储库时,出现 git 警告,指出在 git 的下一个版本中默认拒绝检查存储库。在外部磁盘上,我已签出项目,我想将我在计算机上所做的更改发送到这些存储库。 'git push origin master' 不是正确的方法吗?我是否必须在我的外部磁盘上的存储库上“git pull ...”?所以我不能推动更​​改,而只是拉动它们?仅使用“裸”存储库不同吗?因此,如果我的外部磁盘上的存储库是一个裸存储库,我可以将更改推送到它吗?我理解正确吗?

【问题讨论】:

    标签: git git-push git-pull


    【解决方案1】:

    您不应该推送到非裸存储库,因为推送只会更新存储库的内部状态,并且不会影响已签出的文件磁盘副本。因此,如果您在没有首先更新(通过git checkout)该存储库中文件状态的磁盘副本的情况下开始在该存储库中工作,您可能会遇到问题。

    【讨论】:

    • 那么,推送到 repo 不完全是从 repo 中拉取的?
    • 成为大师:正确;推送实际上与获取相反。 Pull = fetch + 合并到当前分支。
    • 关键是拉取也会更新工作树中的文件(“磁盘上”文件),而推送和获取都不会。
    【解决方案2】:

    仔细阅读警告。新的默认禁止仅在非裸存储库中推送到当前签出的分支。可以推送到非裸仓库中的任何其他分支。

    原因是推送过程无法直接访问工作树,因此工作树下的索引和分支头会发生变化。当您随后转到工作树时,看起来工作树已经撤消了推送的更改以及真正处于开发中的任何更改。这使得区分两组更改变得非常困难。

    推送到其他分支没有这样的缺点。然后,您可以转到该存储库并将这些更改合并到已签出的分支中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2011-04-29
    • 2012-06-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多