尝试按照git book中的描述更改子模块
$ git rm -r vendor/html-minifier
$ git submodule add https://github.com/kangax/html-minifier.git vendor/html-minifier
Run Code Online (Sandbox Code Playgroud)
但它失败了以下
rm 'vendor/html-minifier'
fatal: git rm: 'vendor/html-minifier': Is a directory
Run Code Online (Sandbox Code Playgroud) 我的公司正在将我们的版本控制工具从Rational ClearCase更改为Git.我们有以下开发方案,我们很好奇Git是否有适当的模式来实现我们在ClearCase中的相同行为.
以下是关于我们情况的一些基本观点:
- 我们有许多独立的应用程序.我们称之为AppA,AppB和AppC.
- 我们还有一些所有项目共有的文件(构建脚本等).我们称之为工具.
- 对于AppA,AppB或AppC代码的任何给定剪切,我们需要特定的工具代码剪切.
- 我们的大多数开发人员从不修改工具代码.
对于ClearCase,我们这样建模:
组件:app_a,app_b,app_c,工具
项目:AppA,AppB,AppC,工具
Project AppA包括app_a作为读/写组件,工具作为只读组件.
Project AppB包括app_b作为读/写组件和工具作为只读组件.
Project AppC包括app_c作为读/写组件和工具作为只读组件.
项目工具包括作为读/写组件的工具.
App*项目的每个基线都引用app_*和工具组件的基线.当开发人员重新定义到建议的基线时,他们会从两个组件中获取更改.
对于Git,我们认为子模块可能是最接近正确答案的东西.但是,在提取/重新定位存储库时,听起来需要额外的步骤来更新子模块代码.理想情况下,我们希望透明.此外,我们不一定关心从父存储库的角度知道子模块中发生了什么变化; 我们只关心整个子模块的某个时间点.
在我的git存储库中,我对许多文件进行了utf-8转换,但仅在.git目录下,因此未触及.git目录.在此转换之前,我创建了一个新的测试分支,但现在我不能再使用我的repo了,我无法切换回master.当我做:
git status
Run Code Online (Sandbox Code Playgroud)
或者我得到的任何其他git命令:
error: bad index file sha1 signature
fatal: index file corrupt
fatal: 'git status --porcelain' failed in submodule core/kimai-mobile
Run Code Online (Sandbox Code Playgroud)
我搜索了它并找到了命令:
rm -f .git/index
Run Code Online (Sandbox Code Playgroud)
在此之后:
git reset
Run Code Online (Sandbox Code Playgroud)
但这没有帮助.我不明白出了什么问题.然后我删除了"子模块"核心/ kimai-mobile,突然我再次使用它!
我在这个目录中有另外一个git存储库,我在其中使用我的转换销毁了另一个索引文件.我的问题是,我认为"主"存储库索引文件的意思是.
现在再次工作:)
我的问题是,为什么git会查看这个子模块,虽然我的忽略列表中包含了这个子模块的整个文件夹?
这是我的"主"git的忽略文件:
.gitignore
...
# kimai mobile
kimai-mobile
...
Run Code Online (Sandbox Code Playgroud) 我刚开始为自己的项目使用源代码控制,现在我想添加Joda-Time。我想将其添加为子模块,所以我进入终端并执行:
git submodule add https://github.com/JodaOrg/joda-time.git
Run Code Online (Sandbox Code Playgroud)
并成功下载了所有文件。然后我跑了:
git submodule init
Run Code Online (Sandbox Code Playgroud)
一无所有。
git submodule status
Run Code Online (Sandbox Code Playgroud)
退货
b9fe534c7f5876eced6494a6d6c1deaf2528a579 joda-time (v2.7-17-gb9fe534)
Run Code Online (Sandbox Code Playgroud)
我检查了项目的根目录,然后看到了新的joda-time目录及其来源。但是,现在我如何访问项目中的库?我错过了一步吗?
我习惯于将git克隆到磁盘上的主位置,然后使用本地的git克隆来减少下载和复制时间.
但是,如果我克隆一个包含子模块的项目git clone --recursive,它将--local用于主存储库,但子模块初始化仍然是通过引用URLS,这意味着我仍然要再次进行下载.
有没有办法git clone --recursive从子模块的本地副本而不是规范位置进行克隆?
有没有办法在.gitconfig中设置git clone自动添加--recurse-submodules标志?我试着在.gitconfig中添加以下内容:
[fetch]
recurseSubmodules = true
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
$ git clone upstream nowyprojekt2
Cloning into 'nowyprojekt2'...
done.
Run Code Online (Sandbox Code Playgroud)
我需要添加--recurse-submodule标志
$ git clone --recurse-submodule upstream nowyprojekt2
Cloning into 'nowyprojekt2'...
done.
Submodule 'euca2ools' (https://github.com/eucalyptus/euca2ools.git) registered for path 'euca2ools'
Cloning into 'euca2ools'...
remote: Counting objects: 19147, done.
remote: Total 19147 (delta 0), reused 0 (delta 0), pack-reused 19147
Receiving objects: 100% (19147/19147), 22.23 MiB | 450.00 KiB/s, done.
Resolving deltas: 100% (15556/15556), done.
Checking connectivity... done.
Submodule path 'euca2ools': checked out '12c358cd27ff652cb144de124bb5472a74145277'
Run Code Online (Sandbox Code Playgroud)
我的GIT版本:
$ git …Run Code Online (Sandbox Code Playgroud) 我有一个Rails项目,需要使用别人的Git存储库来处理后端工作.我把这个人的存储库带到我自己的存储库中并使其成为一个子模块(不确定这是不是正确的移动),所以我的项目目录中有一个名为'submodule'的文件夹(即它与我的app,bin,配置文件夹).
要在子模块文件夹中要求所有文件功能,我将以下内容放在application_controller.rb中(使用require_all gem):
require_all 'submodule'
Run Code Online (Sandbox Code Playgroud)
这是我的困惑:子模块文件夹本身就是一个Rails应用程序,因此它有一个app文件夹,配置等.我希望能够在我的应用程序中使用子模块的任何邮件程序/控制器/帮助程序文件夹使用.我知道我正确地要求它们,但是如何在我的应用程序中正确引用这些类/方法?那是什么语法?
例如,子模块有一个包含DeliveryProcessor类的交付控制器,而DeliveryProcessor类有一个名为deliver的方法.如何调用DeliveryProcessor类在交付方法我的应用程序的控制?
解决文件中的冲突时,我可以
git checkout --ours filename
Run Code Online (Sandbox Code Playgroud)
然后提交文件。这样可以解决冲突。然而,
git checkout --ours submodule
Run Code Online (Sandbox Code Playgroud)
似乎不起作用。子模块的引用提交不会更改。
git checkout --ours filename解决子模块引用中的冲突将是什么意思?
我有一个带有git repo的VSTS项目.repo有一些子模块,这些子模块也是软件项目开发的一部分.
有没有办法在同一个VSTS项目中创建子模块?另一种选择是在子模块的VSTS项目和使用子模块的项目之间拆分开发任务,这是不理想的,因为就发展而言,两者之间存在很多重叠.
有没有办法git submodule foreach并行执行命令,类似于--jobs 8参数的工作方式git submodule update?
例如,我们工作的项目之一涉及近200个子组件(子模块),我们大量使用该foreach命令对它们进行操作.我想加快它们的速度.
PS:如果解决方案涉及脚本,我在Windows上工作,大多数时候,使用git-bash.
git-submodules ×10
git ×9
azure-devops ×1
clearcase ×1
clone ×1
git-merge ×1
git-rm ×1
indexing ×1
require ×1
ruby ×1