web-dev-qa-db-ja.com

切り替えずに別のGitブランチをプルする

最近、SVNからGitに切り替え、同時にライブシステムをバージョン管理に移行しました(ローカルチェックアウトやライブへのファイルコピーの代わりに)。

私に割り当てられたプロジェクトでは、全員が同じリポジトリにアクセスし、ライブに変更を加えるためにgit pull そこ。これは、WebデザイナーがまだライブではないがWebテスト環境にあるはずの変更をVCSにプッシュするため、問題を引き起こします。

開発者の1人がライブに移行すると、彼はすべての(おそらく未完成の)変更を取得します。

ライブを追加のブランチに切り替えて、変更されたものをマージすることを考えましたが、gitの知識が不足しているため、どうすればよいかわかりません。

私の考えは:

  • ライブで新しいブランチを作成します(git branch live)。
  • 何かが稼働しなければならないときはいつでも
    • マスターの変更をプルします(例:git checkout master; git pull; git checkout live
    • git merge master

問題は、マスターに切り替えるか、すべてをライブシステムに直接プルすると問題が発生するため、これを回避したいということです。

これを行う方法はありますか、またはLiveシステムを管理するより良い方法はありますか(未完成のものをプッシュしないようにWebbieをトレーニングする場合を除く)。

75
Morfildur

次のコマンドを使用して、別のブランチで作業しているときに、Origin/masterからmasterに変更をプルすることができました。

git fetch Origin master:master
126
Jeff B

git stash マスターをチェックアウトしてプルする前、そしてライブをチェックアウトした後にgit stash pop(または、gitが古い場合はgit stash applyおよびgit stash clear何も隠していないことを前提としています)

21
Tobias Kienzler

最初に問題を解決します。彼らは、ビジネスを推進していないブランチにプッシュするべきではありません。

あなたが尋ねているように見えるのは次のようなものでしょう

git checkout live
git pull Origin master

これは、リモートマスターとライブブランチのマージを試みます。

7
Josh K

全員がコミットできるように、テスト用のgitリポジトリを作成することをお勧めします。ライブウェブサイトを含むすべてのリポジトリは、テストリポジトリのクローンになります。このようにして、誰でもライブWebサイトに触れることなくテストにプッシュできます。誰かがライブサイトを更新する必要がある場合は、Git Testingリポジトリからライブサイトをプルできます。このワークフローはSVNとかなり似ています。柔軟性を高めるために、あなたが説明する「ライブ」ブランチを使用することをお勧めします。

要約すると、全員のgitリポジトリはテストリポジトリのクローンです。ライブの本番サイトは、テストリポジトリのクローンでもあります。あるいは、「git push」が常に本番環境に移行するように、テストをライブ製品のクローンにすることもできます。

この配置に「ライブ」ブランチを追加したり、テストと本番の間に「ステージング」リポジトリを含めるなど、他のオプション。セキュリティを強化するために、ライブgitリポジトリへのアクセスを制限し、ライブプロダクションへのプルを実行するセキュリティで保護されたスクリプトを使用するようにユーザーに強制することをお勧めします。

1
edgester