首先,這不是使用git或將應用程序部署到服務器的常用方式。對於部署,有專門的工具,如軌道上的紅寶石capistrano
或用於symfony的capifony
擴展。當然還有更多用於其他目的。
但是,你問的問題也可以用git來完成,即使它是hackish。
首先,您需要Machine A
和Machine B
的回購克隆,並且您需要從git server
的ssh訪問該機器。
在git server
添加這些遙控器:
git remote add MachineA [email protected]:/path/to/repository.git
git remote add MachineB [email protected]:/path/to/repository.git
然後你可以把使用這個命令:
git push MachineA master
git push MachineB master
而且......轟!你得到一個錯誤:
remote: error: refusing to update checked out branch: refs/heads/master
這是因爲在這種情況下,遠程倉庫不是裸倉庫。通常情況下,非裸倉庫用於開發。如果有人會推入這樣的回購,它會覆蓋當前的發展狀態,因此git否認這一點(thx git)。在你的情況下,它們並不意味着發展,這樣你就可以發出兩個遠程倉庫下面的命令來擺脫這個問題:
git config receive.denyCurrentBranch ignore
推將現在的工作,但如果你輸入遠程服務器你會看到那裏的文件沒有改變。這是git的另一種保護,它不會覆蓋本地文件。要達到此目的,您需要在遠程存儲庫上發佈:
git reset --hard HEAD
。這可以使用post-receive
鉤子自動化:
#!/bin/bash
unset GIT_DIR
cd ..
git reset --hard HEAD
現在它應該按預期工作。 (雖然這不是使用Git的「通常」方式)
爲了避免輸入密碼手動你需要一些密碼認證。但請注意,可以訪問git server
的黑客也可以無密碼地訪問這些機器。因此,這些機器上的user
應儘可能受限制。
機器A,機器B等服務器或客戶機?如果沒有他們的合作,將代碼推送給其他開發人員可能是一個非常糟糕的主意根據您設置的方式,您可能會導致衝突(很有可能),甚至會覆蓋其他開發人員的更改。 – Chris
Git並不真正遵循「客戶端 - 服務器」模型,它更像是「點對點」。就Git而言,您只需在不同的機器上安裝存儲庫。如果你可以通過配置爲接受寫入存儲庫的Git傳輸從「git server」機器連接到「Machine A」,那麼你可以「推送」它,但這是一種循環定義。 –