我在生产中的现有无版本源树上设置了一个存储库(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
。
可能是跟踪相关的东西吗? 我现在感到非常困惑,并且让它变得更糟,似乎我是整个互联网上唯一一个经历类似事情的人。
答案 0 :(得分:1)
你正在推动一个非裸的回购。你不应该这样做。阅读有关远程跟踪分支的信息,以及git push
和git fetch
执行的操作。您正在更改服务器上的checkout out分支指向的提交而不更新工作副本(这是推送到非裸存储库的效果)。
现在服务器上的git status
注意到工作目录与HEAD
不同。它假定唯一合乎逻辑的事情:您必须对工作目录进行更改。那是git status
报道的内容。这个问题有两种解决方案:
请勿推送到生产服务器仓库。我的个人推荐。在其他地方设置一个裸仓库并推到那里。将其作为远程添加到生产服务器仓库。当你想要部署时,ssh进入服务器并拉动。这也将修订控制与部署分开。
在服务器上设置一个挂钩,在推送时执行结帐。您可以在该方法in the GitFAQ