git push之后无法在服务器上获得更新文件

时间:2015-05-19 04:00:16

标签: git

我的笔记本电脑上有本地仓库,服务器上有远程仓库。

在笔记本电脑上:

$ git pull ssh://xxxx@xxxxxxx/home/gittest/ master
$ cat a.php 
<?php
echo 'hello';
?>

所以我在笔记本电脑上更改了文件

$ vim a.php 
$ cat a.php
<?php
echo 'hello';
echo 'hello2';
?>

并提交

$ git add a.php
$ git commit -m 'update'
$ git push ssh://xxxx@xxxxxxxx/home/gittest/ master

现在我检查服务器上的文件

$ cat a.php
<?php
echo 'hello';
?> 

还有旧版本

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   a.php
#

如何在服务器上更新文件?

2 个答案:

答案 0 :(得分:4)

您似乎正在撤离并推送到工作存储库。

这不会按照你想要的方式工作,因为推送更新存储库,而不是工作副本。

推送后,服务器工作副本中的版本似乎已修改,因为它与推送更新的存储库中的HEAD版本不同。

您需要一个裸存储库才能共享。您可以在其他地方了解here

答案 1 :(得分:4)

为什么会发生这种情况

在Git那里

  • [工作树]工作树是项目文件夹中的文件。
  • [index] - 要在下次提交时保存的工作树的快照
  • [repository] ​​ - .git /文件夹及其中的所有内容。

运行git push时,只更新远程服务器上的存储库。如果remote不是裸存储库,它还有一个工作树。但必须通过单独的行动来改变它。

如何检查远程存储库是否真的更新?

运行git remote show <remote name>以查看分支状态

如何解决这个问题?

您是否正在使用git部署到服务器?如果是这样,您需要:

  • 在推送登录到REMOTE之后,运行git checkout master以使工作树按照repo
  • 运行
  • 设置一个服务器端的post-recieve git hook来为你做这件事。

如果你不使用git进行部署,为什么需要遥控器上的任何文件?在这种情况下,最好使用裸存储库。