如何接受git远程存储库的推送更改?

时间:2015-04-02 15:03:11

标签: git

我有git将我的git远程存储库从我的Web服务器克隆到我的本地计算机上。在我的本地机器上进行更改之后,我已经使用git远程存储库提交并将更改推送到Web服务器,并且在运行git status时看到有更改。但我能想到实现变化的唯一方法就是运行git stash。我确信这是不正确的方式。我已经尝试过git fetch和git merge,但这是我尝试使用其他人进行生产更改时更新的远程存储库。

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

git stash
Saved working directory and index state WIP on master: eb8230d Changes
HEAD is now at eb8230d Changes

4 个答案:

答案 0 :(得分:1)

看起来我需要运行

git checkout -f

将Web服务器更新为分支机构的负责人或更改。

答案 1 :(得分:1)

我猜你的意思是远程存储库有一个工作目录是一个实时网站。您希望通过将这些更改推送到远程存储库并将更改自动应用于工作目录(即实时网站)来将更改部署到您的网站。

您要做的是使用post-receive挂钩设置远程存储库,该挂钩将检出新文件。

Git的默认设置是假设工作目录中的更改很重要而且不容易被吹走。这是因为默认设计是为工作目录设置为用户正在工作的实际目录,进行更改等。对于充当实时网站的存储库,此假设不成立,因此默认行为不会工作得很好。

特别是,推送到远程存储库将更新该存储库上的分支和git索引,但不会对工作目录进行任何更改。这使得您的工作目录看起来好像只是撤消了刚刚推送的任何工作。

您可以使用已经找到的命令git checkout --force并将其放在post-receive挂钩中,每当您推送更改时,存储库都会检出新文件。这会消除您在工作目录中所做的任何更改,但可能这些“更改”永远不会是虚假更改,只会撤消推送的更改。如果您曾在远程存储库的工作目录中手动编辑任何内容,则可能会丢失这些编辑内容。


另一个选择是让您的Web服务器上的存储库成为--bare存储库,因为远程存储库通常应该是。而不是拥有一个也作为实时网站的工作目录,使用post-receive hook脚本运行命令将网站部署到另一个位置。

http://krisjordan.com/essays/setting-up-push-to-deploy-with-git

答案 2 :(得分:1)

如果要通过SSH和git命令手动更新实时服务器,则可以使用

git checkout -f

如果您希望本地推送自动更新远程存储库,请在实时服务器上运行以下命令。

git config receive.denyCurrentBranch updateInstead

答案 3 :(得分:0)

您需要让远程网络服务器从正在跟踪的分支机构中提取最新的提交。这是用git checkout(branchname)和git pull(一次在正确的分支上)手动完成的。

您可以编写一个cronjob来定期尝试git pull,或者为您的存储库设置钩子。每次将提交推送到repo时,这都会向远程Web服务器发送一条消息。

我通过使用Jenkins服务器和ssh-command插件来解决这个问题,并进行了一次git pull。

另一种解决方案是将您的网络服务器添加为另一个遥控器。你可以输入:

来做到这一点
git remote add webserver ssh://<your user name>@<FQDN>:22/path/to/repo.git
git push webserver <branch>