从本地副本推送到远程显示为更改

时间:2013-05-23 17:14:11

标签: git push pull git-remote

我在生产中的现有无版本源树上设置了一个存储库(git init)(不要告诉我)。 在初始导入提交后,我在我的开发机器上克隆了repo并开始编辑。

在第一次提交/推送后,我的本地副本上的一切似乎正常,但随后在prod服务器上git pull总是说“已经是最新的”。并且更改显示为本地修改“否定”。

澄清我的意思与否定:假设在编辑之后,我在我的本地副本上添加了一个文件(myfile)并进行了编辑/推送。 我将在服务器上看到的将是:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#       deleted: myfile

以及一系列:

#       modified: other_file

反映我刚刚提交的文件,但我的更改已“恢复”。 git log中的历史似乎是线性和一致的。

这是服务器上.git / config的内容:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = user@host:repo
[branch "master"]
    remote = origin
    merge = refs/heads/master

在我的本地副本上,它是相同的加号:

ignorecase = true
precomposeunicode = false
中的

  • dev machine git version 1.8.1.1
  • prod machine git version 1.5.6.5(我知道,它已经过时了,但我现在无法更新)

可能是跟踪相关的东西吗? 我现在感到非常困惑,并且让它变得更糟,似乎我是整个互联网上唯一一个经历类似事情的人。

1 个答案:

答案 0 :(得分:1)

你正在推动一个非裸的回购。你不应该这样做。阅读有关远程跟踪分支的信息,以及git pushgit fetch执行的操作。您正在更改服务器上的checkout out分支指向的提交而不更新工作副本(这是推送到非裸存储库的效果)。

现在服务器上的git status注意到工作目录与HEAD不同。它假定唯一合乎逻辑的事情:您必须对工作目录进行更改。那是git status报道的内容。这个问题有两种解决方案:

  • 请勿推送到生产服务器仓库。我的个人推荐。在其他地方设置一个裸仓库并推到那里。将其作为远程添加到生产服务器仓库。当你想要部署时,ssh进入服务器并拉动。这也将修订控制与部署分开。

  • 在服务器上设置一个挂钩,在推送时执行结帐。您可以在该方法in the GitFAQ

  • 上找到更多信息