2017-07-13 3 views
1

問題のセットアップでは、質問のために改行してください。submodule initの呼び出しまでgitサブモジュールのサブディレクトリを隠してください

私は自分のgit repoを持っているprojectAに取り組んでいます。このprojectAには、独自の別個のgit repoであるprojectBにいくつかのオプションツールがあります。私が理解するところでは、これはgitサブモジュールのように聞こえるので、projectBはprojectAのサブモジュールになります。

これを設定するには、私はgit submodule add projectBを使用します。これによりprojectBへのリンクのように機能するprojectAのサブディレクトリが作成され、その情報は.gitmoduleに保存されます。このファイルと "サブディレクトリ"の両方をコミットする必要があります。 projectBには何の注意も払わずにprojectAで開発を続けることができます。 projectBを更新してプッシュすると、projectA内のprojectBをgit submodule update --remoteで更新できます。これにより、プロジェクトBの現在のバージョン(projectAによって追跡されない)とサブディレクトリファイル自体(projectAによって追跡される)の両方のファイルを更新することによって、projectAのprojectBサブディレクトリが変更されます。

ここで、3番目のユーザーがprojectAを取得してprojectCを作成したいとしますが、projectBは必要ないとします。彼らはgit clone projectAを使用し、projectAのすべてを取得し、.gitmoduleとprojectBの空のサブディレクトリを取得します。私は彼らにまだ.gitmoduleを手に入れて、彼らにオプションがあるようにしたいと思いますが、projectBの空のサブディレクトリがないようにすることは可能でしょうか?


私の質問は、それがユーザーませgit submodule init>git submodule update前PROJECTAにおけるサブモジュールProjectBのためのサブディレクトリを非表示にすることはできますか?

サブディレクトリは実際にprojectBを取得するためのコミットを示す特別なgitファイルなので、これは可能ではないのですが、これは.gitmoduleに保存されていると思います。興味深いのは、私が成し遂げたい、あるいはどんなgit hacksでも良い方法がある場合です。

+0

一つの解決策は、 '隠しディレクトリ通話をすることです。サブモジュールがすべて存在するモジュール( 'mkdir .modules; cd .modules; git submodule add projectB')があります。それから私は '.gitignore'に' projectB'というファイルのシンボリックリンクを追加して、作業ディレクトリにシンボリックリンク 'ln -s .modules/projectB'を作成するように指示します。 'git submodule initをやらなければならない人のための余分なステップ。 gitサブモジュールの更新。 ln -s .modules/projectB'は大したことではありませんし、サブモジュールを望まない人にはプロジェクトをきれいに保ちます。 –

答えて

1

私の質問は、それがユーザーませgit submodule init>git submodule updateprojectAにおけるサブモジュールprojectB用のサブディレクトリを非表示にすることはできますか?

はい:第3のユーザーのブランチを作成します。
のコミットからそのブランチを開始する必要があることを除いて、サブモジュールを追加したブランチを開始する必要があります(この方法では、サブディレクトリはまったくありません)。

次に、あなたはwithout committing、そのブランチにあなたの現在のブランチをマージする必要があります。そのように、あなたは.gitmodulesとサブフォルダを削除することができます(彼らは唯一の.gitmodulesを続けるならば、Gitは指定されたパスで何のサブモジュールが存在しない文句を言うでしょう)。
マージを完了することを約束します。今

、任意の新しい枝がを開始することの重要性が前にコミットから枝を言ったので、(その創設以来、それらを削除しませなかったため、.gitmodulesやサブフォルダは削除されません戻ってあなたにそのブランチからマージ後で新しいユーザーがサブモジュールを取得したい場合はサブモジュールの作成。

、彼/彼女ができcheckout that file from your branch

git checkout yourBranch -- .gitmodules 
git checkout yourBranch -- a/submodule 
+0

ああ、賢い方法は大きな画像を考えています。私がこのアイデアを正しく追い求めているなら、これはサブモジュールを望まない即時のユーザーがいるときに行うべきパッチのようだ。そうでなければ、この独立したサブモジュールブランチを維持することは少しの努力のようです。たとえば、そのユーザーがメインブランチから後で引き出したい場合は、サブモジュール情報を正しく取得することになります。新しいブランチはプッシュだけに影響し、プルしないようにすることができます。 –

+0

@NoviceC "たとえば、メインブランチから後で引き出したい場合は、サブモジュール情報を正しく取り込むことになります。はい、もう一度、 'git merge --no-commit'は、サブモジュールを削除し、コミットする前に' .gitmodules'を削除することができます。 – VonC

+0

私が実際にサンのサブモジュールをプライマリマスターとdevブランチにすると、これはうまくいく可能性があります。私がサブモジュールを更新する必要があるとき、 'git checkout submoduleBranch;を実行しているサブモジュールブランチをチェックアウトすることができます。 gitサブモジュールの更新 - リモート; git commit; git push'です。さもなければ、実際に開発がサブモジュールなしで行われるmaster/devブランチからの結果をマージするだけです。その後、毎回ファイルを削除することに悩む必要はありません。 –

関連する問題