Git 吉特;提交除子模块更改以外的所有更改”;
我通常的git工作流是Git 吉特;提交除子模块更改以外的所有更改”;,git,git-submodules,Git,Git Submodules,我通常的git工作流是 git checkout -b branch_name .... <do my thing> git commit -am 'some comment' git fetch git merge origin/develop .... <do some more things> git commit -am 'more things' git push git签出-b分支机构名称 .... git commit-am“一些评论” git获取 gi
git checkout -b branch_name
.... <do my thing>
git commit -am 'some comment'
git fetch
git merge origin/develop
.... <do some more things>
git commit -am 'more things'
git push
git签出-b分支机构名称
....
git commit-am“一些评论”
git获取
git合并源/开发
....
git提交-am“更多内容”
git推送
不幸的是,我正在处理的repo有子模块(我从不修改,但其他人会修改)。如果我执行上述操作,并且如果合并更新了子模块,则第二次提交会拉入子模块的旧版本,并且我的拉入请求中会出现意外的子模块更改
我知道我可以在合并后执行git子模块更新--init--recursive
。但这很容易忘记,我并不总是想这样做(例如,当我跳转到另一个分支来更改某个内容并跳回时)
我的问题
除了提交子模块之外的所有内容的git commit-am'blahblah'之外,还有其他方法吗
我意识到我必须更新它们才能使我的代码正常工作。但我只是不想有意外犯下这些错误的问题
我还希望避免在合并/切换分支时自动更新它们,因为这会使跳转变得更慢、更麻烦。那么,您希望执行过时的子模块签出,但添加所有其他内容?Git没有一个单字母提交选项来实现这一点,但编写脚本非常简单
git ls-files -s $(git ls-files -m) | grep -v ^16 | cut -f2-
将列出所有修改的非子模块路径,您可以添加或显式提交这些路径
所以
不管你喜欢怎么包装都应该这样做。那么,你想进行过时的子模块签出,但添加所有其他内容?Git没有一个单字母提交选项来实现这一点,但编写脚本非常简单
git ls-files -s $(git ls-files -m) | grep -v ^16 | cut -f2-
将列出所有修改的非子模块路径,您可以添加或显式提交这些路径
所以
不管你喜欢什么,我都会做的
我知道我可以做git子模块更新--init--recursive
。但这很容易忘记,我并不总是想这样做(例如,当我跳转到另一个分支来更改某个内容并跳回时)
您可以通过创建预提交挂钩(提交前运行的脚本)自动完成这一任务
因为这只在提交之前运行,所以您不需要考虑这一点,如果您只是切换分支等,也不会发生这种情况。但是,使用此脚本提交会更慢
为此,请导航到.git
目录中的hooks
文件夹
在这里,您可以创建一个名为pre-commit
的文件,其中包含以下内容:
#/bin/bash
git子模块更新--初始化--递归
这将在提交之前自动更新该存储库中的所有子模块
这个脚本应该可以在linux和windows上运行,因为git for windows附带了bash。如果不起作用,可以尝试使用cmd/git bash的完整路径,而不是/bin/bash
。我认为在windows上使用cmd可能会更快
如果要提交而不更新子模块,可以将--no verify
添加到git commit
命令中
有关详细信息,请参阅
我知道我可以做git子模块更新--init--recursive
。但这很容易忘记,我并不总是想这样做(例如,当我跳转到另一个分支来更改某个内容并跳回时)
您可以通过创建预提交挂钩(提交前运行的脚本)自动完成这一任务
因为这只在提交之前运行,所以您不需要考虑这一点,如果您只是切换分支等,也不会发生这种情况。但是,使用此脚本提交会更慢
为此,请导航到.git
目录中的hooks
文件夹
在这里,您可以创建一个名为pre-commit
的文件,其中包含以下内容:
#/bin/bash
git子模块更新--初始化--递归
这将在提交之前自动更新该存储库中的所有子模块
这个脚本应该可以在linux和windows上运行,因为git for windows附带了bash。如果不起作用,可以尝试使用cmd/git bash的完整路径,而不是/bin/bash
。我认为在windows上使用cmd可能会更快
如果要提交而不更新子模块,可以将--no verify
添加到git commit
命令中
有关详细信息,请参阅