さまざまなプロジェクトで使用するすべてのJavaScriptおよびCSSマスターファイルとスクリプトを保持しているGitメディアリポジトリがあります。
独自のGitリポジトリにある新しいプロジェクトを作成する場合、新しいプロジェクトのメディアリポジトリからJavaScriptファイルを使用して、変更を加えるときにスクリプトの両方のコピーを更新する必要がないようにする方法を教えてください。 ?
さまざまなプロジェクトで使用するすべてのJavaScriptおよびCSSマスターファイルとスクリプトを保持しているGitメディアリポジトリがあります。
独自のGitリポジトリにある新しいプロジェクトを作成する場合、新しいプロジェクトのメディアリポジトリからJavaScriptファイルを使用して、変更を加えるときにスクリプトの両方のコピーを更新する必要がないようにする方法を教えてください。 ?
回答:
キーはgitサブモジュールです。
Gitコミュニティブックまたはユーザーマニュアルのサブモジュールの章を読み始める
リポジトリPROJECT1、PROJECT2、およびMEDIAがあるとします...
cd /path/to/PROJECT1
git submodule add ssh://path.to.repo/MEDIA
git commit -m "Added Media submodule"
他のリポジトリで繰り返します...
さて、クールなことは、MEDIAへの変更をコミットするときはいつでもこれを行うことができるということです:
cd /path/to/PROJECT2/MEDIA
git pull
cd ..
git add MEDIA
git commit -m "Upgraded media to version XYZ"
これは、MEDIAサブモジュールWITHIN PROJECT2がバージョンXYZであることを記録したものです。
各プロジェクトが使用するMEDIAのバージョンを100%制御できます。 gitサブモジュールは素晴らしいですが、実験してそれらについて学ぶ必要があります。
大きな力には、しこりに噛まれる大きなチャンスがあります。
サブモジュールの代わりにサブツリーを使用することを検討してください。これにより、レポユーザーの生活がはるかに簡単になります。より詳細なガイドはPro Gitブックにあります。
私があなたの問題をよく理解しているなら、あなたは以下のものを望んでいます:
残念ながら、あなたが望むもののための究極の解決策はありませんが、あなたがあなたの人生を容易にすることができるいくつかのものがあります。
最初に重要なことを1つ決定する必要があります。プロジェクトリポジトリのすべてのバージョンについて、メディアファイルのバージョンへの参照を保存しますか?たとえば、example.comというプロジェクトがある場合、2週間前に使用したstyle.cssを知っている必要がありますか。
それを知る必要がない場合、解決策は簡単です。
ただし、ほとんどの場合、このバージョン情報を知りたいと思います。この場合、2つの選択肢があります。
すべてのプロジェクトを1つの大きなリポジトリに保存します。このソリューションの利点は、メディアリポジトリのコピーが1つしかないことです。大きな欠点は、プロジェクトのバージョンを切り替えるのがはるかに難しいことです(別のバージョンにチェックアウトすると、常にすべてのプロジェクトが変更されます)。
サブモジュールを使用します(回答1で説明)。この方法では、メディアファイルを1つのリポジトリに保存し、プロジェクトには特定のメディアリポジトリバージョンへの参照のみが含まれます。ただし、この方法では、通常、メディアリポジトリのローカルコピーが多数あり、すべてのプロジェクトでメディアファイルを簡単に変更することはできません。
もし私があなただったら、おそらく最初または3番目のソリューション(シンボリックリンクまたはサブモジュール)を選択するでしょう。サブモジュールを使用することを選択した場合でも、人生を楽にするために多くのことができます:
コミットする前に、サブモジュールディレクトリの名前を変更し、シンボリックリンクを共通のメディアディレクトリに配置できます。コミットする準備ができたら、シンボリックリンクを削除してサブモジュールを元に戻し、コミットします。
メディアリポジトリのコピーの1つをリモートリポジトリとしてすべてのプロジェクトに追加できます。
次の方法で、ローカルディレクトリをリモートとして追加できます。
cd /my/project2/media
git remote add project1 /my/project1/media
/ my / project1 / media内のファイルを変更する場合、リモートサーバーにプッシュせずに、ファイルをコミットして/ my / project2 / mediaからプルできます。
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
これらのコミットは他のユーザーと共有していないため、後で(git resetを使用して)自由に削除できます。
サブツリーとサブモジュールに他の回答が示唆する問題がありました...主にSourceTreeを使用していて、かなりバグが多いようです。
代わりに、結局SymLinksを使用することになり、それはうまくいくように見えるので、可能な代替策としてここに投稿します。
ここに完全なガイドがあります:http : //www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
ただし、基本的には、管理者特権のコマンドプロンプトで2つのパスをmklinkするだけです。必ず/ Jハードリンクプレフィックスを使用してください。これらの行に沿った何か:mklink / JC:\ projects \ MainProject \ plugins C:\ projects \ SomePlugin
また、相対フォルダーパスを使用して、プロジェクトを最初にチェックアウトするときに各ユーザーが実行するようにバットに配置することもできます。
例:mklink / J。\ Assets \ TaqtileTools .. \ TaqtileHoloTools
フォルダーがリンクされたら、それを参照しているメインリポジトリ内のフォルダーを無視する必要があります。そうでなければあなたは行ってもいいです。
注:投稿がこの質問に対する重複質問としてマークされていたため、別の投稿から重複回答を削除しました。