2009-05-19 7 views
10

状況落下:更新代わりにFTPドラッグの単一のコマンド(gitのプッシュ)でウェブサイトと

  • を私はウェブサイト
  • のローカルコピーを持っている私は
  • へのSSHアクセスを持っているサーバーを持っています

何をしたいですか?私は

  • がローカルのブランチを作る私のコードで幸せになるまで、ローカルにコミット

    • したサーバ
    • 更新単一のコマンドを使用してWebサイトにプッシュされるべきものである1つのmasterブランチ(git push origin master)

    git initを使ってgit repoをローカルにセットアップしてから、サーバ上のフォルダにプッシュすると、動作しません。ファイルをチェックするために私がFTPにサーバにFTPするとき、彼らは実際にそこにいる。私がサーバーにSSHしてgit statusを実行すると、サーバーにプッシュした後であっても、クリーンではありません。

    1. をそのフォルダに移動して(cd folder_x)
    2. が新たなgitリポジトリを設定
    3. (MKDIR folder_x)自分のコンピュータ上に新しいフォルダを作成します。私がやっている


      手順(git init)

    4. (gitリポジトリが正常にセットアップされます)
    5. git push origin masterを使用してリポジトリをサーバにプッシュします(originはs etc:p[email protected]
  • +0

    重複http://stackoverflow.com/questions/3728054/git-push-to-live-server – cmcginty

    +0

    [Git pushを使用してプロジェクトをデプロイする](http://stackoverflow.com/questions/279169/) deploy-a-project-git-push)を使用します。リモートでの[git config receive.denyCurrentBranch updateInstead](http://stackoverflow.com/a/28381235/895245)は良い可能性があります。 –

    答えて

    12

    リモートのgitリポジトリがプッシュを受け取った後で、git checkout -fを実行するポスト受信フックを書く必要があります。詳細は、Using Git to manage a web siteを参照してください。

    +1

    これは私が実際に私のウェブサーバ上で仕事をしないと仮定しているようです。ですから、そこで行われた作業は失われてしまいます。 – gman

    +0

    Git 2.3ではもうこのフックは必要ありません。もう 'git config receive.denyCurrentBranch updateInstead'を実行することができます。 https://github.com/blog/1957-git-2-3-has-been-releasedを参照してください。 – Aurelien

    +1

    @Aurelienのコメントは受け入れられた答えであるべきだと思います!非常に素晴らしい解決策! –

    1

    gitリポジトリにプッシュすると、そのリポジトリの作業ファイルは更新されません。一般的に押すと、裸のリポジトリに移動する必要があります---それはgit pushの動作を意図しているようです。

    私の(ローカル)プロジェクトの1つとして、デプロイメントレポに自分の仕事をプッシュするときに、最新の "ui"サブディレクトリを自動的にチェックするスクリプトを書いています。 Developing Django projects using Git

    誰かがマスターに更新をプッシュし、非裸のものを使用している場合は、単にサーバー上の更新後のフックに "git reset - ハードマスター"を設定することもできますチェックアウトされたファイルのために別の領域を持つのではなく、

    0

    私はこのFAQの項目で詳細を示すように更新後のフックを使用します。 http://git.or.cz/gitwiki/GitFaq#non-bare

    あなたが「裸」としてリモートリポジトリを設定している場合、それはあなたの作業ツリーを更新します。

    0

    ギットバージョン1.9.1
    Ubuntu Server 14。04 LTS
    LAMPサーバー

    私のGitリポジトリの作業ディレクトリを、自分のWeb開発者がサーバーに変更を加えるたびに更新するように設定しました。ログには新しいコミットが記録されていますが、作業ディレクトリは更新されません。これを手動で行うのではなく、更新ごとに手動で行う(git checkout -f)、プッシュが受信された後に自動的に設定することができます。あなたの ".git" ディレクトリに

    1. 、 "フック" フォルダに入ります。からのプッシュを受けた後、/ binに/ shの

      #アップデート作業ディレクトリを

      #:!

    2. このコンテンツをフォルダ "フック" 内 "をポスト受ける" という名前のファイルを作成します。リモートクライアント。
      #これは、gitの作業ディレクトリに指示してください。 "ます。chmod + xはをポスト受信"

    3. -f

      GIT_WORK_TREE =の/ var/www /のdev_site Gitのチェックアウトは、 "フック" のフォルダに入力して、ファイルを実行する権限を有効にします。

    コミットがGitリポジトリにプッシュされると、作業ディレクトリが更新されるようになりました。私のサイトは、ブラウザでそのサイトにアクセスしたときに変更内容を表示するようになりました。

    この例では、私の作業ディレクトリは "/var/www/dev_site"です。あなたのレポがどこにあるかに応じてこれを変更してください。

    このレポは裸のレポではありませんのでご注意ください。裸のRepoには、Webサーバーから読み取れる作業ディレクトリはありません。

    関連する問題