2015-12-21 68 views
2

后自动复制另一个仓库,我需要自动执行下列步骤:混帐:如何git的克隆

git clone A && cd A && (git clone B; git clone C) 

我不能使用子模块。我无法使用git包装(已存在或通过在我的*$shell_rc中编写一些函数)。

+0

由于您在A内克隆了B和C,您是否尝试过使用git子模块?它不一定会自动化,但可以成为组织回购的更好方式。 –

+0

有没有办法说git submodules总是获取主而不是特定的提交? –

+0

是的,请参阅VonC的答案;) –

回答

1

我只是简单地将一个脚本addExternals添加到回购的顶级目录中,并在README中提及它。您可能会考虑将其添加到构建系统,但我认为最好将子库的控制权交给用户。

我认为这是最好的方法的原因:在克隆存储库之前,您无法影响用户,他们需要知道您依赖的不是模块的子存储库。如果您只是调用一些魔术来获取子库,那么当用户需要更新其中一个子库以使主库再次编译时,用户将在稍后跳过它。

+0

“如果您只是调用一些魔术来获取子仓库,那么当其中一个子仓库需要更新以使主仓库再次编译时,您的用户将在稍后跳过它。” - 如此真实! –

+0

@ilpianista尽管我同意向用户公开子库,但手动调用脚本听起来像是重新创建子模块轮子。为什么你不能使用子模块? –

+0

@AntonioPérez他们遇到的问题是,您必须手动更新项目A,以便每次对它们提交时指向B和C的最新提交。我喜欢submodules,但我的老板不喜欢我刚才描述的这种行为。 –

2

您可以使用别名

alias gitclones='git clone A && cd A && (git clone B; git clone C)' 

,也可以定义一个定制的包装(没有的git本身,而是一个bash脚本在用户的路径)

但是git的方式是使用子模块,在这种情况下,简单的git clone --recursive --remote就足够了。
你可以让一个子模块遵循像master这样的分支。
请参阅 “Git submodules: Specify a branch/tag

注意回购B和C将被考虑为nested repo,只有自己gitlink将被记录在A.

+0

不,我无法触及用户的shell配置文件。 –

+0

@ilpianista git别名不是shell配置,它们存储在'〜/ .gitconfig'中 –

+1

@ilpianista我编辑了我的答案:你可以让一个子模块遵循分支 – VonC

1

你可以使用一个post-checkout挂钩。因此,如果用户在A中转换分支/引用,则可能会使库和C得到更新。

+0

我可以运送回购钩吗?或者必须先下载它? –

+0

不,它需要每个克隆手动初始化钩子(您可能有一个脚本来提供单步初始化)。请参阅http://stackoverflow.com/q/427207/198011 –

+0

然后,基本上这与运送带有项目A的脚本并告诉人们运行该脚本以获取子项目相同。 –