我们使用git子模块来管理一些依赖于我们开发的许多其他库的大型项目.每个库都是作为子模块引入依赖项目的单独repo.在开发过程中,我们经常想要抓住每个依赖子模块的最新版本.
git有内置命令来执行此操作吗?如果没有,Windows批处理文件或类似文件怎么样呢?
我有一个git子模块(RestKit),我已经添加到我的仓库.
我不小心改变了那里的一些文件,我想回到源版本.为了做到这一点,我试着跑
Mac:app-ios user$ git submodule update RestKit
Run Code Online (Sandbox Code Playgroud)
但正如你在这里看到的,这不起作用,因为它仍然是"修改内容":
Mac:app-ios user$ git status
...
# modified: RestKit (modified content)
Run Code Online (Sandbox Code Playgroud)
甚至
Mac:app-ios user$ git submodule update -f RestKit
Run Code Online (Sandbox Code Playgroud)
不会还原本地修改的文件.
如何重置该子模块的内容?
有些人(我认为在1.6.x版本附近)git意识到了子模块内部的变化.那只会让我烦恼:
$ git status vendor | grep modified: # modified: vendor/rails (modified content)
$ git diff vendor/ diff --git a/vendor/rails b/vendor/rails --- a/vendor/rails +++ b/vendor/rails @@ -1 +1 @@ -Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f +Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f-dirty
请停止?
好的,我有答案.现在我有另一个问题:
我可以把它放进去~/.gitconfig吗?从我最初看起来我不能,并且我没有看到任何有希望通过略读补丁.(我想我仍然可以做别名.)
我想知道是否有一种方法可以为git命令默认设置一个标志.具体来说,我想设置--abbrev-commit标志,以便在执行时git log,我想执行git log --abbrev-commit.
与" git命令默认设置标志是否有任何方法? "不同,显然没有用于将-abbrev-commit添加到git log的配置标志.此外,git手册指出我无法创建别名:"为避免混淆和使用脚本的麻烦,忽略隐藏现有git命令的别名"
我的第三个选择是glog=log --abbrev-commit在我的.gitconfig文件中创建一个新的别名.但我宁愿不用新命令发明自己的DSL.
有没有其他方法来实现它,以便abbrev-commit默认设置标志?
我在一台位于NFS上的Linux机器上有一个10 GB的仓库.第一次git status需要36分钟,之后git status需要8分钟.似乎Git依赖于操作系统来缓存文件.只有第一个git命令commit,status包括打包/重新包装整个回购需要很长时间才能获得巨大的回购.我不确定你是否曾经使用git status过这么大的回购,但有没有人遇到过这个问题?
我已经试过git gc,git clean,git repack但所花费的时间仍是/几乎是相同的.
子模块或任何其他概念,比如将repo打成较小的那些有帮助吗?如果是这样,那么最好分割更大的回购.有没有其他方法可以改善大型仓库上git命令的时间?
我在另一个模块中有一个git子模块,通过git submodule add <...>(从父仓库发出的命令)添加,因此该.gitmodules文件是在父仓库内部自动生成的。
假设我对子模块进行了更改(编辑:并且不提交这些更改),然后导航回到父模块git add -A,然后执行,然后git status,它说“未上演提交更改:子模块目录名称 ...等”。
我以为git会读取.gitmodules文件(父git生成的文件!),意识到它是git子模块目录,因此当我向父请求状态时不提及其未暂存状态吗?