26

Gitを使用して、いくつかの一般的なJS / CSSライブラリやユーティリティメソッド(つまり、別のリポジトリからの特定のファイル)をプロジェクトに含めたいのですが、それらが常に最新であるようにしたいと思います。リモートリポジトリ全体は本当に必要ではありません。リモートファイルの「ローカルコピー」で作業し、変更を元に戻すことができればボーナスです。

やや平行した例:ASP.NETでは、(「リモート」)他のライブラリの.dllファイルを(「ローカルコピー」なしで)参照することでこれを行うため、外部ライブラリを再コンパイルするたびに、プロジェクトはすでに最新のものを指します。バージョン。

シナリオ例

私のプロジェクトは... MyProjectで、外部リポジトリExternalLibraryExternal2からいくつかのファイルが必要です。各リポジトリのクローンを別の場所に作成して、ファイルをコピーしてリポジトリに貼り付けたくありません。を改善した場合は、ExternalLibraryMyProject/scripts/common1.jsにプッシュバックしたいと思います。

  1. 私のプロジェクト/
    • index.html
    • スクリプト/
      • mycode.js
      • otherplugin.js
      • common1.js <-ExternalLibraryから
      • plugin2.js <-ExternalLibraryから
    • スタイル/
      • mystyle.css
      • common.css <-External2から
  2. ExternalLibrary /
    • common1.js
    • plugin1.js
    • plugin2.js
    • bunchofothercrap..。
  3. 外部2/
    • common.css
    • bunchofothercrap..。

関連資料:

4

1 に答える 1

16

Gitは、リモートプロジェクトで選択したファイルを選択することをサポートしていません。サブツリーを使用して必要なファイルを選択し、それを元に戻すための何らかの戦略を理解することもできますが、特に、最初に選択したファイルよりも2、3多いファイルが必要であると突然判断した場合は、通常、これは複雑になります。

私が通常やっていることは、を使用することsymlinksです。これは、プロジェクトをサブモジュールとしてプロジェクトに追加し、ファイルを適切な場所にシンボリックリンクすることで実行できます。

あなたの例は次のようになります:

$ git clone <url> myproject
$ cd myproject
$ git submodule add <url> external_library
$ git submodule add <url> external2
$ cd scripts
$ ln -s ../external_library/common1.js
$ ln -s ../external_library/plugin2.js
$ cd ../styles
$ ln -s ../external2/common.css

シンボリックリンクをWindowsで機能させるには:

次に、変更を加える前に、新しいブランチを作成します。

$ cd external_library
$ git checkout -b myproject
# make changes back in ../myproject
$ git commit <files> # in external_library

次に、ブランチをgithubなどにプッシュし、変更を元に戻すために作成者にプルリクエストを送信できます。

次のように同期を維持できます。

$ cd external_library
$ git checkout master
$ git pull
$ git checkout myproject
$ git merge master

また、サブモジュールが変更されたときに親プロジェクトを更新する必要があります(例git commit external_library)。プロジェクトを使用する人は誰でもする必要がありますgit clone --recursive <url_to_myproject>

注:プロジェクトに個別のブランチを使用しなくても、このほとんどを実現できます。自分にとって最も意味のあるものを使用してください。

于 2014-03-04T17:40:27.603 に答える