3

私はこのような質問がたくさん聞かれていることを知っています。しかし、私は自分の問題に対する正確な答えを見つけていません。私はGitを使い始めているところです。私は、Gitやその問題に関するバージョン管理の経験はありません。これまでのところ、問題なくローカルで起動して実行することができました。ターミナルからGitを使用でき、SourceTreeアプリをいじり始めました。

リモートで設定しようとすると問題が発生します。サーバーにGitをインストールしています。リモートステージングサーバーにリポジトリを作成しました。SourceTreeを介してプッシュアップできます。ただし、リモートリポジトリがWebルートに接続されているようには見えません。ローカルでブランチに変更を加え、コミットし、マージしてから、リモートにプッシュアップします。しかし、これらの変更は、ステージングサーバーを介して提供されるページにはありませんか?

リモートで、リポジトリプロジェクトを保持するためにWebルートの外部にディレクトリを作成しました。その中にmygit.gitというサブディレクトリを作成しました。ここで、gitinit--bareを使用してリモートリポジトリを作成しました。これにより、プッシュできる直接作業なしでリポジトリが作成されます。

これは私が取り組んでいる環境です

Production (remote server)
^
Staging (remote server)
^
Development (local)

だから、私の質問は次のとおりです。

  1. ローカルプッシュを介して行われた変更がWebサーバーに表示されないのはなぜですか
  2. 本番サーバーにもリポジトリを用意して、すべての変更をバブルにする必要がありますか?
  3. 私はこれをすべて間違っていますか?

これについて助けてくれてありがとう。

4

2 に答える 2

2

裸のgitリポジトリには作業ツリーがありません(つまり、ファイルがありません)。
したがって、裸のリポジトリへのプッシュによってWebルートが変更されることはありません。

ただし、そのベアリポジトリにフックを追加して、そのベアリポジトリpost-receiveのコンテンツをWebルートにチェックアウトし、そのファイルを更新することができます。

その手法を説明するさまざまな例があります。たとえば、「git GIT_WORK_TREE post-receivehookdeploymentremote」です。

于 2012-09-19T06:30:38.980 に答える
2

VonCの答えは正しいです。VonCが提供したリンクに加えて、このリンクhttp://toroid.org/ams/git-website-howtoを見つけました。このリンクと一緒に物事を機能させるために私がしたことのプロセスをただ通過するつもりです。私が提供しているリンクの情報は2010年11月17日に最後に更新されましたが、それでも機能します。物事を設定する方法は他にもたくさんあると確信しているので、これは決して網羅的なものではありません。私はサーバーやUnixコマンドの経験があまりないので、この説明はその観点から来ています。

非常に重要な最初のステップは、以下のコマンドを実行するためにリモートサーバーへのSSH接続が必要であるか、サーバー自体のコマンドラインから実行する必要があることです。これは別のトピックであり、それを支援するための多数のリソースをオンラインで見つけたため、ここでは取り上げません。

まず、ローカルマシンとリモートサーバーにGitがインストールされていることを確認します。そこにあるハウツーのほとんどはこれを説明していて、非常に簡単に実行できます。http://www.git-scm.comは、ローカルマシンのインストーラーをダウンロードした場所です。このサイトには、リモートサーバーへのインストール方法に関する情報もあります。

注意すべきもう1つのこと。ローカルマシンにMAMPを実行しているMacを使用しており、リモートサーバーはUbuntuLinux10.04.1です。

ステップ1-ローカルリポジトリを設定する

これはいくつかの方法で行うことができます。コマンドラインまたはSourceTree、Tower、GitXなどのGitアプリを使用します。これがGitの使用方法であるため、アプリを使用しました。

ステップ2-リモートリポジトリを設定する

$ mkdir website.git && cd website.git
$ git init --bare

1行目-リモートマシンにディレクトリを作成し、そのディレクトリに変更します

2行目-website.gitディレクトリ内にベアリポジトリを作成します。website.gitには、.git拡張子を付けた任意の名前を付けることができます。ベアリポジトリに関するVonCの説明を参照してください。

ステップ3-これは私に最も問題を与えたステップです

$ mkdir /var/www/www.example.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f
$ chmod +x hooks/post-receive

1行目-これは、Webルートとなるディレクトリを作成するだけです。Webサーバールート用にディレクトリがすでに設定されている場合は、これを実行する必要がない場合があります。すでにWebルートセットがある場合は、これをスキップしてください。

2〜4行目-これが私の最初のハードルでした。このコマンドは、受信後のファイルに含まれる内容を表示します。リモートサーバー上のこのファイルにFTPで転送するか、コマンドラインから編集できます。最終的にはテキストエディタで編集し、ftp経由でサーバーに保存し直しました。私にとってはずっと簡単です。このファイルは、ステップ2で作成したディレクトリwebsite.git / hooks/post-receeive.sampleにあります。

また、ファイルの実際の名前の最後に.sampleが付いていることにも気付くでしょう。これを拡張子なしで名前変更する必要があります。これは本質的にフックをオンにします。新しいファイル名は単に受信後にする必要があります

ファイルを開くと、次のテキストが表示されます。

#!/bin/sh
#
# An example hook script for the "post-receive" event.
#
# The "post-receive" script is run after receive-pack has accepted a pack
# and the repository has been updated.  It is passed arguments in through
# stdin in the form
#  <oldrev> <newrev> <refname>
# For example:
#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
#
# see contrib/hooks/ for a sample, or uncomment the next line and
# rename the file to "post-receive".

#. /usr/share/doc/git-core/contrib/hooks/post-receive-email

これらの行はコメント化されているため、何も害はありません。これらの行を削除するか、コメント行の下に次の行を残して追加することができます。それが完了したら、ファイルをリモートサーバーに保存し直します。

#!/bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f

5行目-これにより、受信後のファイルのファイル権限がサーバー上で実行可能になります。これは、物事が後で壊れないようにするための確実なステップです。

ステップ4-リモートを追加し、ローカルマスターをプッシュします

この手順は、コマンドラインまたは前述のGitアプリのいずれかを使用して実行できます。私はアプリの1つを使用しています。私にとっては簡単で、私が言ったように、私はサーバーとUNIXコマンドの初心者です。良い点は、アプリとコマンドラインを組み合わせて使用​​できることです。すべてがgitリポジトリに記録され、どちらも同じものが表示されます。最も快適なものを使用してください。ほとんどの場合、基本的なコマンドラインのいくつかを学ぶように指示されますが、これは悪い考えではありません。

ステップ5-ローカルマシンにブランチを作成します。

変更に満足したら、それらをマスターブランチにマージし、リモートにプッシュします。これでサイトが更新され、追加した新しい変更が反映されます。

それでおしまい。それが私を立ち上げて実行させたものです。うまくいけば、これが役に立ち、私が書いたものにあまり多くのエラーがありません。

于 2012-09-19T15:44:32.270 に答える