簡體   English   中英

如何在git遠程存儲庫上接受推送的更改?

[英]How to accept pushed changes on git remote repository?

我已經將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

看起來我需要跑步

git checkout -f

將Web服務器更新到分支的頭或進行更改。

我猜您的意思是遠程存儲庫有一個工作目錄,該目錄是一個實時網站。 您想通過將更改推送到遠程存儲庫來將更改部署到網站,並將更改自動應用到工作目錄(即實時網站)。

您要做的是使用接收后掛鈎設置遠程存儲庫,該掛鈎將簽出新文件。

Git的默認設置是假設工作目錄中的更改很重要並且不應輕易被吹散的。 這是因為默認設置是為了將工作目錄設計為用戶正在工作,進行更改等的實際目錄。對於充當實時網站的存儲庫,此假設不成立,因此默認行為不成立工作得很好。

特別是,推送到遠程存儲庫將更新該存儲庫上的分支和git索引,但不會對工作目錄進行任何更改。 這使得工作目錄中似乎有更改,這些更改只是撤消了剛剛推送的任何工作。

您可以使用已經找到的命令git checkout --force並將其放在post-receive掛鈎中,並且每當您進行更改時,存儲庫都將簽出新文件。 這會吹走您在工作目錄中的所有更改,但是大概這些“更改”將只是偽造的更改而已,這些偽造的更改只會撤消推入的更改。 如果您曾經手動編輯遠程存儲庫工作目錄中的任何內容,則可能會丟失這些編輯內容。


另一個選擇是將Web服務器上的存儲庫設置為--bare存儲庫,通常遠程存儲庫應該如此。 可以使用接收后掛鈎腳本運行命令來將網站部署到另一個位置,而不是使用同時充當實時網站的工作目錄。

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

如果要通過SSH和git命令手動更新實時服務器,則可以使用

git checkout -f

如果要本地推送自動更新遠程存儲庫,請在實時服務器上運行以下命令。

git config receive.denyCurrentBranch updateInstead

您將需要讓您的遠程Web服務器從它正在跟蹤的分支中提取最新提交。 這是通過git checkout(分支名稱)和git pull(一次在正確的分支上)手動完成的。

您可以編寫一個cronjob來定期嘗試git pull或為存儲庫設置鈎子。 每次將提交推送到存儲庫時,這都會向您的遠程Web服務器發送一條消息。

我通過使用Jenkins服務器和ssh-command插件SSH並執行git pull解決了此問題。

另一個解決方案是將您的Web服務器添加為另一個遠程服務器。 您可以通過鍵入以下內容來執行此操作:

git remote add webserver ssh://<your user name>@<FQDN>:22/path/to/repo.git
git push webserver <branch>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM