后自动复制另一个仓库,我需要自动执行下列步骤:混帐:如何git的克隆
git clone A && cd A && (git clone B; git clone C)
我不能使用子模块。我无法使用git包装(已存在或通过在我的*$shell_rc
中编写一些函数)。
后自动复制另一个仓库,我需要自动执行下列步骤:混帐:如何git的克隆
git clone A && cd A && (git clone B; git clone C)
我不能使用子模块。我无法使用git包装(已存在或通过在我的*$shell_rc
中编写一些函数)。
我只是简单地将一个脚本addExternals
添加到回购的顶级目录中,并在README
中提及它。您可能会考虑将其添加到构建系统,但我认为最好将子库的控制权交给用户。
我认为这是最好的方法的原因:在克隆存储库之前,您无法影响用户,他们需要知道您依赖的不是模块的子存储库。如果您只是调用一些魔术来获取子库,那么当用户需要更新其中一个子库以使主库再次编译时,用户将在稍后跳过它。
“如果您只是调用一些魔术来获取子仓库,那么当其中一个子仓库需要更新以使主仓库再次编译时,您的用户将在稍后跳过它。” - 如此真实! –
@ilpianista尽管我同意向用户公开子库,但手动调用脚本听起来像是重新创建子模块轮子。为什么你不能使用子模块? –
@AntonioPérez他们遇到的问题是,您必须手动更新项目A,以便每次对它们提交时指向B和C的最新提交。我喜欢submodules,但我的老板不喜欢我刚才描述的这种行为。 –
您可以使用别名
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.
不,我无法触及用户的shell配置文件。 –
@ilpianista git别名不是shell配置,它们存储在'〜/ .gitconfig'中 –
@ilpianista我编辑了我的答案:你可以让一个子模块遵循分支 – VonC
你可以使用一个post-checkout
挂钩。因此,如果用户在A
中转换分支/引用,则可能会使库和C
得到更新。
我可以运送回购钩吗?或者必须先下载它? –
不,它需要每个克隆手动初始化钩子(您可能有一个脚本来提供单步初始化)。请参阅http://stackoverflow.com/q/427207/198011 –
然后,基本上这与运送带有项目A的脚本并告诉人们运行该脚本以获取子项目相同。 –
由于您在A内克隆了B和C,您是否尝试过使用git子模块?它不一定会自动化,但可以成为组织回购的更好方式。 –
有没有办法说git submodules总是获取主而不是特定的提交? –
是的,请参阅VonC的答案;) –