55

PHP/HTML/JS/CSS/etc ファイルがすべて Git リポジトリに保存されている Web サイトがあります。

現在、リポジトリ用の 3 種類のコンピューター (またはユース ケース) があります。

  • ローカル開発者: 最新の変更をプルし、変更を加え、ローカル リポジトリにコミットし、マスター サーバーにプッシュします。
  • マスター サーバー: 中央リポジトリ、すべての変更がマスター サーバーにプッシュされます
  • Web サーバー: Web サイトのデプロイ時に変更がマスター サーバーから取り出されます。

したがって、現在、次のことを行っています。

local: git push origin master
local: password: ********
local: ssh admin@webserver.com
webserver: password: ********
webserver: cd ~/domain.com/
webserver: git pull origin master

私の質問は、ローカル コンピューターから Web サーバーに直接プッシュできる方法はありますか?

すなわち。

local: git push origin master
local: password: ********
local: git push webserver master
local: password: ********
4

6 に答える 6

39

はい、Web サーバーに直接プッシュできますが、 --bare 引数で複製されたリポジトリにのみプッシュする必要があるため、お勧めしません。git フック システムを利用して、メイン リポジトリが Web サーバー上のリポジトリを自動的に更新できるようにします。次の更新後のフックを確認してください。

http://git-scm.com/docs/githooks

このスクリプトは、ssh 経由で Web サーバーにログインし、

cd ~/domain.com/
git checkout master
git pull origin master

この方法では、中央サーバーへのプッシュのみに集中する必要があり、Web サーバーを気にする必要はありません。プッシュが行われると、Web サーバーは常に更新されます。何かを自動化できる場合は、それを自動化してください:)

スクリプトで ssh を介してログインすることについての素敵な記事も見つけました (パスワードを使用する必要がある場合、ssh キーが設定されていれば簡単です)。

http://bash.cyberciti.biz/security/expect-ssh-login-script/

お役に立てれば!

于 2011-04-27T19:16:55.983 に答える
34

私は同じ質問をしましたが、ここで現在最も投票されている回答に満足していませんでした。結局、プロセスの概要を説明し、IMOがはるかにクリーンで迅速なアプローチであるgit-website-howtoに従いました。

TL; DR、git init --bare開発マシンから変更をプッシュするWebサーバー上に新しいリポジトリを作成します。Webリポジトリが変更を受信すると、受信後フックが起動され、ファイルがWebルートにコピーされます。

私はこのアプローチが好きです。なぜなら、受信後のフックがサーバー上で機能するため、ローカルマシンがはるかに高速にプッシュし、それ自体を解放できるからです。これにより、特定のブランチのリモートトラッキングを非常に簡単に設定することもできます。productionしたがって、マスターを引き続き開発し、他の場所でgitリポジトリにリンクしながら、Webサーバーを更新するために呼び出されるブランチを作成できます。

git config receive.denycurrentbranch ignore注:プッシュするときにローカル開発ボックスで警告を抑制するには、Webサーバーリポジトリで実行する必要があります。

于 2012-09-20T16:43:54.680 に答える
10

http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.htmlの git URL 部分を見てください。

だからあなたは試してみます:

git push ssh://admin@webserver.com/~admin/domain.com/ master

追加: あなたが求めていることの一部は、複数のリモート リポジトリを持つ方法だと思います。

git remote add webserver ssh://admin@webserver.com/~admin/domain.com/

これにより、次を実行できます。

   git push origin master
   git push webserver master
于 2010-09-16T18:21:32.233 に答える
4

あなたが探している機能はここで説明されていると思います: http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6- 544f4834cda3

local他の場合と同じように、Web サーバーをリモートとして追加できます。

git remote add webserver admin@webserver:/path/to/repo.git/
# push only master branch by default
git config remote.webserver.push master  

プッシュする準備ができたら、次のことを実行できます。

git push webserver
于 2010-09-16T19:47:11.170 に答える