

例えばAとBというgitリポジトリの中に共通のライブラリ等があって、  
それをシンボリックリンクでワンソースで管理したいという要件があるとします。  
ディレクトリ例

[code]

    A/.git
     /lib -> ../lib
    B/.git
     /lib -> ../lib
    lib/
    
[/code]

しかし、このような場合にA・Bでcommitするとシンボリックリンクはファイルとして扱われてしまいますので、そこからさらにpushした時にlib以下のファイルの実体まではpushされないかと思います。

これは、例えばアプリサーバーと管理画面サーバーでサーバーを分けてて中では所々同じソースを使っている環境なんかにこのような事が発生すると思うのですが、こういった場合の最適解を教えて頂きたく存じます。


CC BY-SA 3.0
2015-03-11T15:52:15.673
7800
2015-03-12T05:24:23.570
8793
question
git
複数のgitリポジトリの中に共通のライブラリを入れるベスト・プラクティスを教えて下さい。


共通のライブラリをシンボリックリンクでワンソース管理することが少し奇異に思えます。

一般的な解決策として、`git submodule`を利用する方法があります。

この場合、AとBのそれぞれのライブラリを更に別リポジトリで管理しなければならないため要件とは違いが感じられるかもしれませんが、もともと独立したプロジェクトとライブラリなので、それぞれ別のリポジトリで管理するべきではないかと思います。

共通ライブラリ（もしくはリソース）がものすごく膨大で数GBもあるためにHDDの容量を食ってしまって困るといった場合には対処できなそうです。

以下のサイトが参考になると思います。  
<http://qiita.com/sotarok/items/0d525e568a6088f6f6bb>


CC BY-SA 3.0
2015-03-11T19:01:45.847
7801
2015-03-11T19:39:07.663
2015-03-11T19:39:07.663
8351
8351
7800
answer


パッケージ管理ツールに類するソフトウェアと併用する事が多い気がします。

例えば Node.js であれば、npm という管理ツールを利用します。  
package.json というファイルに依存するライブラリを記述しておき、クローンした後でツールのコマンド (`npm install`)
を利用してライブラリを取得します。

Ruby なら gem, C# や VB.NET なら NuGet
と、いろいろな言語に標準的なパッケージ管理ツールが存在するので、調べてみるのも良いかもしれません。


CC BY-SA 3.0
2015-03-12T05:24:23.570
7821
2015-03-12T05:24:23.570
4809
7800
answer