Git:パブリックブランチとプライベートブランチをマージしながら、両方のブランチで特定のファイルをそのまま保持します
質問
ここでgitに関するいくつかの質問を読みましたが、これに対する答えが見つかりませんでした:
特定のファイルの分岐を許可するパブリックブランチとプライベートブランチがあります。
これらは、パスワードとローカルカスタマイズを含む構成ファイルです。
私はブランチをプライベートからパブリックへ、そしてバックへの両方の方法でマージしたいのですが、それらの特定のファイルを自動的にマージしたくありません。
この方法でgitをセットアップする方法はありますか?私は自動化された解決策を見つけたいです:)-マージがいつものようにできるように。
編集:解決策は次のとおりです(gitattributeに関するアドバイスをくれたVonCに感謝します)
私にとって唯一の予想外のことは、「マージ保護」次の構成が適用された直後ではなく、2つのブランチでファイルが分岐した後にのみ動作を開始します
.gitattributes(これを共有したい場合はgitで追跡)または.git / info / attributes:
file1 merge=keepmine
path/file2 merge=keepmine
keepmineは名前付きカスタムマージマネージャーで、選択したファイルの内部マージドライバーの代わりに呼び出されるdo-nothingコマンドであり、以下で設定されます
プライベートブランチからパブリックブランチにマージするとき、通常 git merge --squash private
を実行します。そうすれば、非公開の編集は公開ブランチのgit履歴には入りません。
.git / config:
#public repository
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = <public repo git url>
#private repository
#has to set up with git init and populated with the initial commit to branch mybranch
[remote "private"]
push = +:
url = /path/to/local/private/repo
[merge "keepmine"]
name = dont_merge_selected_files
driver = echo %O %A %B
[branch "master"]
remote = origin
merge = refs/heads/master
#private branch settings
[branch "mybranch"]
remote = private
merge = refs/heads/mybranch
これを改善する方法がある場合はコメントしてください
他のヒント
これを行う1つの方法は、 git rebase
。 master
の最後から数件のコミットとしてプライベートな変更を保持することにより、パブリックのものを master
ブランチ(または作業ブランチとして選択したもの)にコミットできます。 、更新するたびにマスターに対してプライベートブランチをリベースします。
これを処理する別の方法は、 frobozz.config.template
などのテンプレート構成ファイルをGitに保持することです。作業ディレクトリで、 frobozz.config.template
を(バージョン管理されていない) frobozz.config
にコピーして変更します。ローカルの変更をバックアップする必要がある場合は、作業ディレクトリも必ずバックアップしてください。
これは、マージの競合が検出された場合にのみ機能するようです。ブランチ間でファイルを前後にマージすると、ファイルは上書きされます。間違って設定しない限り。もちろん、これはWindowsのmsysgit gitバージョン1.6.5.1.1367で行われます。
パスワードをバージョン管理下に置くことは、これまでで最悪のアイデアです。別のファイルを操作するには、gitではなくCVSが必要です。個別のファイルではなく、ツリー全体で動作する他の多くの最新のDVCSと同じようにGitします。