Git:パブリックブランチとプライベートブランチをマージしながら、両方のブランチで特定のファイルをそのまま保持します

StackOverflow https://stackoverflow.com/questions/1807036

  •  05-07-2019
  •  | 
  •  

質問

ここで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

これを改善する方法がある場合はコメントしてください

役に立ちましたか?

解決

安全のために、 git属性 例についてはこちら)、これらのプライベートファイルの場合

その方法で、パブリックブランチでマージされた場合、プライベート情報を含むファイルが空のまま(またはパブリックコンテンツを含む)であることを保証するスクリプト(「マージマネージャー」)を定義できます。 privateブランチにマージされました。
そのファイルについて考えることなく、マージ/リベースできることを意味します。

他のヒント

これを行う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します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top