Git子模块,切换分支,以及包含外部JS依赖项的推荐方法(哦,我的)

时间:2011-03-21 21:18:49

标签: javascript git git-submodules

我有一个Ruby on Rails项目(使用git版本化),其中包含许多公共GitHub存储库中存在的外部JavaScript依赖项。将这些依赖项包含在我的存储库中的最佳方法是什么(当然,除了手动复制它们之外),这种方式允许我控制它们何时更新?

git子模块似乎是一种完美的方式,但是当在多个分支之间切换时会导致问题,其中许多分支不包含相同的子模块。

如果git子模块是最好的方法,我想我真正的问题是:我如何在许多分支中使用子模块而不是一直遇到这个问题:

my_project[feature/new_feature√]$ git submodule update 
Cloning into public/javascripts/vendor/rad_dependency...
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 34 (delta 9), reused 0 (delta 0)
Receiving objects: 100% (34/34), 12.21 KiB, done.
Resolving deltas: 100% (9/9), done.
Submodule path 'public/javascripts/vendor/rad_dependency': checked out '563b51c385297c40ff01fd2f095efb14dbe736e0'

my_project[feature/new_feature√]$ git checkout develop 
warning: unable to rmdir public/javascripts/milkshake/lib/cf-exception-notifier-js: Directory not empty
Switched to branch 'develop'

my_project[develop⚡]$ git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   public/javascripts/milkshake/lib/cf-exception-notifier-js/
nothing added to commit but untracked files present (use "git add" to track)

2 个答案:

答案 0 :(得分:1)

this blogthis post都会报告相同的警告:

  

这是因为目前不支持子模块删除。已经有很多关于如何使git处理更好的讨论,但到目前为止还没有人实现它。但它在我的待办事项清单上,敬请关注......

(Jens Lehmann当时称,2010年11月)。

现在(2011年3月),我没有看到(或者我错过了)在这方面的任何改进。

git checkout -f -q develop在您的情况下会做什么?

答案 1 :(得分:1)

子模块的替代方法是subtree merge strategy。从该页面复制(它有更多信息,这纯粹是供参考):

  

在这个例子中,假设你有   / path / to / B的存储库(但它   如果你愿意,也可以是一个URL)。   你想合并的主分支   那个存储库到dir-B   当前分支中的子目录。

     

以下是您需要的命令序列:

$ git remote add -f Bproject /path/to/B 
$ git merge -s ours --no-commit Bproject/master <2> 
$ git read-tree --prefix=dir-B/ -u Bproject/master
$ git commit -m "Merge B project as our subdirectory"
$ git pull -s subtree Bproject master

我个人觉得这很繁琐(我更喜欢子模块,即使是你提到过的副本),尽管很多人都会发誓。