背景:我们目前有一个项目,它需要将多个git
存储库克隆到一个父文件夹中。我试图写一个脚本,这样我可以运行git
操作,所有子目录,使其更易于管理(如./gitall.sh status
/add
/reset
/commit -m "Foobar"
/push
/等Shell脚本>双引号参数,只有它存在
脚本运作良好所有操作,直到我试图执行一个./gitall.sh push
我收到错误fatal: remote part of refspec is not a valid name in
为每个目录,因为有效的命令是git -C somedir push "" "" "" ""
(git
borks在后双引号)。NB的参数需要用双引号,以便捕获参数rs与空格。
gitall.sh
find ./repo-* -type d -depth 0 -exec bash -c "git -C {} \"$1\" \"$2\" \"$3\" \"$4\" \"$5\"" \;
反正是有双引号的参数,只有当它的存在? (或者无论如何告诉git
忽略尾部双引号?)
如果你有这么多的git仓库需要自动与它们进行交互,你可能想重新考虑你的仓库结构。 [考虑子模块](https://git-scm.com/book/en/v2/Git-Tools-Submodules)。 – Schwern
如果您发现自己需要同时提交*多个存储库*,那么您使用的是Git错误。如果您在多个存储库中有更改,并且它们在语义上属于一起以便您想将它们提交到一起,那么它们不应该放在不同的存储库中。如果你有独立的存储库,那些应该独立工作*,而不需要另一个存储库来了解它的历史。 – poke
谢谢大家!这是我最终使用的。 https://gist.github.com/nickgrealy/3ad1d08a5efc4696a29c658f1842d89a#file-git-sh –