我知道不建议这样做,但我确实有多个项目的文件夹,我希望保持最新。
是否有一个命令可以查找文件夹中的每个git存储库并发送以下命令..
git add -u
git add .
git commit -m 'Latest'
所以我可以直接进入某个文件夹,然后运行一个命令让它们全部更新?
这不是子模块问题
答案 0 :(得分:8)
为什么不使用这样的东西:
#!/bin/bash
for DIR in `ls`;
do
if [ -d $DIR/.git ];
then
echo "updating location: " $DIR;
cd $DIR
# your commands here...
git add -u
git add .
git commit -m 'Latest'
cd ..
fi
done
答案 1 :(得分:2)
也许您正在寻找类似mr
(homepage)的内容。我用它来一次更新一堆repos,但它可以配置为做你想要的任何东西。它也可以在官方回购中以Ubuntu和Debian包的形式提供。否则你就可以编写一个脚本来为你完成这些工作。
答案 2 :(得分:2)
Disclamer:这是自己的代码。如果您使用或分叉它,我没有经济利益,但它是针对这种情况编写的,也许它有所帮助。 ;)
我写了gitglue。您可以标记存储库并执行基于标记的任意命令。检查this tutorial about gitglue或分叉gitglue on Github.
答案 3 :(得分:0)
我使用bash脚本(在我的.bashrc
中)在多个存储库上多次运行同一git命令。
bash对回购位置进行硬编码,但可以轻松更改。多次运行同一命令的问题之一是正确传递带引号的"
参数,通常是-m " commit message"
我这样运行这些命令:
mgit commit -a -m "my commit message"
,其中mgit是我的.bashrc中的别名。
这适用于任何git命令(至少是我每天测试和使用的git命令),例如:
mgit status -uno
,mgit pull
此函数可确保所有引号(在-m
之后均得到正确处理)
parse_git_args()
{
git_args=""
end_comment=""
for var in "$@"
do
if [[ $var == '-m' ]];
then
git_args+=" -m \""
end_comment="\""
else
git_args+=" $var"
fi
done
git_args+=$end_comment
echo $git_args
}
multiple_git_func()
{
start=$(pwd)
git_args=$(parse_git_args $@)
root=`git rev-parse --show-toplevel` #find the repo from which the command was run
# go to root apply command and then go to sub repos (hardcoded location wrt root)
cd $root
echo "=============================="
echo "issuing git $git_args on $root"
eval "git $git_args"
cd repo2 # repo2 is installed in root, could be anywhere else relative to root
echo "=============================="
echo "issuing git $git_args on repo2"
eval "git $git_args"
#go back to initial folder
cd $start
}
.bashrc中的 alias mgit=multiple_git_func