web-dev-qa-db-ja.com

git:各リモートに異なる.gitignoreファイルがあります

特定のファイル(クラウドコンピューティングプラットフォームに展開するためにコンパイルされたファイル)をコミットするリモートリポジトリがありますが、githubに展開したくありません...

リモートごとに異なる.gitignoreファイルを作成する方法はありますか?

64
opensas

これはgitのモデルではあまり意味がありません。コミットにはファイルのセットが含まれます。 .gitignoreファイルはすべて、特定のパターンに一致するファイルを自動的に追加しないようにUIに指示します。これが実質的に意味することは、ほとんど同じであるが、ファイルのサブセットのみを含むコミットの並行セットを持つことです。

分岐スキームを使用してこれを行うことができます。この場合、マスターから分割され、同じですが追加のコンパイル済みファイルを含む「展開」ブランチがあります。これは、ファイルを自動的にコンパイルしてリポジトリに追加するgitフックで自動化することもできます。私はこのような構造を想定しています:

master:       A ---> B ---> C ---> D
               \      \      \      \
                \      \      \      \
deployment:      -> A'  -> B'  -> C'  -> D'

つまり、特定のサーバーがマスターで新しいコミットを取得するたびに、プロジェクトをビルドし、ビルドされたファイルをDからの新しいコミットに追加し、それを展開ブランチにコミットします。これは、githubにプッシュする必要はありません。

37
Dougal

これを行う方法を見つけました。

私の場合、プロジェクトをherokuおよびgithubと同期させる必要がありました(パブリックリポジトリとして)。

しかし、個人情報を含む一部のファイルは、公開リポジトリで共有するのは面白くありませんでした

通常、単純なプロジェクトは次のフォルダー構造になります

Project folder (remote heroku)
    - .git
    - .gitignore
    - (folders and files)

私がやったのは、もう1つのレベルを追加し、その中に別のgitリポジトリを作成し、プロジェクトからいくつかのファイルを削除するgitignoreを使用することでした。

Project public (remote github)
    - .git
    - .gitignore
    - Project folder (remote heroku)
        - .git
        - .gitignore
        - (folders and files)

したがって、これは異なるgitignoresを持つ2つのリモートリポジトリを持つgitリポジトリではありません。

2つの異なるリポジトリがあります。

最も内側では、IDEによって生成されたファイルと、実行時に生成されたいくつかのファイルのみを除外します。

最も外側のレベルでは、公開できないすべてのファイルを除外します。

6
Guilherme

自動化されたソリューションここに記載されている方法:

  1. ルート.gitを設定して、異なる方法で送信したいサブフォルダーを無視します。
  2. サブフォルダー内で新しいgitを初期化し、リモート構成を割り当てます
  3. ルートフォルダーの.git/hooks/pre-Pushファイルを変更して、受信した引数に基づいてこれらのサブフォルダーでgit Pushを実行します。
1

別のオプションは git submodules です。

これは、たとえば、コードとドキュメントを独立したアクセス制御などの異なる2つのリポジトリに配置する場合に便利です。合計3つのリポジトリ、ドキュメント用のサブモジュールリポジトリ、コード用の別のリポジトリ、マスター(gitサブモジュールではありません)両方を含むリポジトリ(pypiアップロード用など)。これは、CS教科書プロジェクトを編成する適切な方法です。どちらのプロジェクトも独立して順調に進行し、マスターリポジトリメンテナーが主導してメジャーリリースで同期できます。

1
hobs