• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

**その1**でsubmoduleをaddし、git-submodule statusコマンドでステータスを確認するところまでの作業をしました。
今度はaddした以外の人がpullして、submoduleを確認するところを書いてみます。

###submoduleを取得:init & update
shell>>
git pull --rebase #submoduleを追加したコミットを取得
git submodule
-e110f2056783465b8d719bdb1ab5fd14e7650f56 vendor/plugins/rspec
<<--

(-がついているので)この時点ではrspec submoduleが初期化されていません。よって下記のコマンドで初期化します:

shell>>
git submodule init
git submodule update
<<--

又は

shell>>
git submodule update --init
<<--

updateすることによりソースファイルを取得します。
これで、addした以外の人もsubmoduleを追加することができました。しかし、まだこれで終わりではなくて実はいくつか検討すべき点があります:

  • submoduleに修正を加えないかどうか
  • どのバージョンを使うか:commit hash
  • (railsの)deployはどうするか:Capistrano
  • submoduleの削除

###外部のrepoをそのままか、forkしてからか
submoduleをaddする前に検討すべき事項です(!):
追加するremoteリポジトリを変更したくなる可能性があるかどうか検討する必要があります。例えばrailsやrspecなら変更を加えるというのはほとんどないように思われますが、完成度の低いpluginだと自分で修正したり、追加したりすることが考えられます。そのような場合、下記のようなシナリオが考えられます:

  1. remoteをsubmodule(変更しない)
  2. Githubであればforkして、それをsubmoduleにする
  3. 自分のローカルにcloneして、それをsubmoduleにする
  4. サーバにrepoを作ってremoteのファイルを追加、それをsubmoduleにする

1,2はなんとなく想像できますが、3,4は運用が面倒そうです...
また、railsまでsubmoduleにする記事もあったのですが、毎回deploy時にコピーすることになるのでdeployに時間がかかるだろうし、容量も食うので運用には向いていないかもしれません。

###どのコミットをsubmoduleとして採用するか
submoduleを利用する際、外部のbleeding edgeブランチを積極的に採用したくはありません。なので、タグか特定のバージョン(コミット)を利用するのが適切です:
shell>>
cd vendor/plugins/rspec/rspec
git tag
1.1.10
(略)
1.2.1
1.2.2
git checkout 1.2.2
cd ../../..
<<--

rspecのタグ1.2.2を採用しました。このあとRAILS_ROOTに戻ってcommit, pushすればokです。
この後、他の人がこの変更を反映するには下記の作業を行います:
shell>>
git pull --rebase #submoduleを追加したコミットを取得
git submodule update
<<--

###Capistranoでsubmoduleを使えるようにする
一行追加するだけ!
rails>>
set :git_enable_submodules, 1
<<--

via http://github.com/guides/deploying-with-capistrano

###submoduleの削除
rspecを例に:

  1. .gitmodulesファイルから該当する行を削除
    shell>>
    [submodule "vendor/plugins/rspec"]
    path = vendor/plugins/rspec
    url = git://github.com/dchelimsky/rspec.git
    <<--

  2. .git/configファイルから該当する行を削除
    shell>>
    [submodule "vendor/plugins/rspec"]
    url = git://github.com/dchelimsky/rspec.git
    <<--

  3. git rm --cached path_to_submodule
    パスの最後に/(スラッシュ)がない状態で:
    shell>>
    git rm --cached vendor/plugins/rspec
    <<--

  4. git commit、pushでおしまい

via http://git.or.cz/gitwiki/GitSubmoduleTutorial

###.gitmodulesファイル
初めてsubmoduleを追加すると、下記のファイルが追加されます:
shell>>
.gitmodules
<<--

その他に.git/configも変更されます。

###submoduleをもっとよく理解するRefs

  • ここの解説が一番わかりやすかったです:

http://woss.name/2008/04/09/using-git-submodules-to-track-vendorrails/

  • vendor/railsにsubmodule使おうぜ!という...!

http://woss.name/2008/04/11/using-git-submodules-to-track-vendorrails-2/

  • submoduleがうまく動かなかったレポート

http://blog.buildingwebapps.com/2008/5/20/got-git-submodules-not-a-go-go

posted by satoko satoko on Tue 7 Apr 2009 at 21:26 with 0 comments
Contents rssrss
NSAssertやNSLogを無効にする:-DNS_BLOCK_ASSERTIONS=1とNS_BLOCK_ASSERTIONS
GDBでview.frameを表示させる
Core Animationについてのリンク集
[iPhone] new BSDライセンスについてライセンス引用のメモ
Implementing a Container View Controller in UIViewController Class Reference
UITableView用のNSIndexPathの作り方
Xcodeのテンプレート、View-based ApplicationとWindow-based Applicationの違い
CopyOnSelectのLion対応
Xcode4のCode Snippetsを別のPCに移動する+gitで管理する
[iPhone] Singleton: iOS4以降はGCDのdispatch_onceを使う
Tags
iphone開発gitIBInterfaceBuilderiOSSIMBLSnippetsterminaltwitterxcodeXcode4
Comments rssrss
https://rootskitchen.bar/ https://rootskitchen.bar/: Just had a solid session playing the crash format ... 05/18 17:27
guest guest: Optimizar el tiempo durante un viaje de negocios e... 05/18 00:46
https://foolsandkings.bar/ https://foolsandkings.bar/: Wrapped up a cracking night session grinding crash... 05/17 19:23
guest guest: Para muchos turistas, el transporte publico y la l... 05/15 18:22
https://safeedsautotransport.com/ https://safeedsautotransport.com/: Многие пользователи в Узбекистане интересуются, на... 05/13 14:36
evlnwyiyh evlnwyiyh: something new and exciting [url=http://www.gyxb4s... 05/08 11:27
guest guest: The creative community and travel enthusiasts note... 05/07 02:59
https://www.thegameroom.org/online-casinos/100-free-spins/ https://www.thegameroom.org/online-casinos/100-free-spins/: Frisse xxx platforms brengen innovatieve inhoud vo... 05/03 11:12
Services from s21g
YOMU Web小説リーダー
小説投稿サイトの公式ページを開き、WebView表示と読み上げ向け表示を切り替えて、移動中や作業中にもWeb小説の続きを聴きやすくするiPhoneアプリです。
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
個人開発者のためのホスティング一体型ノートサービス
ハンドミラー
iPhone向けの手鏡アプリ
ツイプロ(twpro)
Twitterプロフィールの高速検索エンジン