在 Git 中设置项目非常容易,因此我甚至可以为小脚本设置单独的存储库。现在的问题是如何管理它们。
我在多个地方使用这些存储库。当我对某些存储库进行更改时,我希望能够更新其他位置的存储库。
因此,我有一个包含许多存储库的目录。
- 如何获取所有存储库?
- 如何检查它们中是否有任何未提交的更改?
- 如何检查它们中是否有需要合并的更改?
最好能够用一个命令完成这些操作。
输出需要足够简洁,以便注意到需要处理的事项。
在 Git 中设置项目非常容易,因此我甚至可以为小脚本设置单独的存储库。现在的问题是如何管理它们。
我在多个地方使用这些存储库。当我对某些存储库进行更改时,我希望能够更新其他位置的存储库。
因此,我有一个包含许多存储库的目录。
最好能够用一个命令完成这些操作。
输出需要足够简洁,以便注意到需要处理的事项。
有一个方便的工具可以获取所有多个存储库。
git-pull-all
是一个命令行工具,可异步地在多个 git 存储库上执行。
npm install -g git-pull-all
假设您拥有以下文件和目录:
~/Projects/
cool-examples/
.git/
funny-movies/
my-todos.txt
super-express/
.git/
~/Projects
目录下运行git-pull-all
命令时,它应该找到子Git存储库(在上述情况下为cool-examples和super-express),然后对每个存储库执行git pull
命令。$ cd ~/Projects
$ git-pull-all
funny-movies/
Not a git repository
cool-examples/
Already up-to-date.
super-express/
Already up-to-date.
Done!
git-pull-all ~/Projects
git status
标志:
-t, --time time of last commit shown (default true)
-f, --format {r|i} format time: relative|iso (default r)
-b, --branch branch shown
-q, --query query fetch needed (implies -br)
-r, --remote remote shown
-l, --url url shown
-d, --dirty dirty shown (default true)
-u, --untracked untracked shown
-s, --stash stash shown
-o, --order {t|n} order: time|name (default t)
-e, --emit {t|j|m} emit format: table|json|markdown (default t)
-h, --help help for status
FOR /D %%G in (%cd%\*) Do cd %%G & call git branch & call git pull & cd ..
echo All code pulled successfully!!
pause
https://github.com/wwjamieson3/envisionTools有一个名为gitstat的bash脚本,可以实现这个功能以及更多。它是GNU和mac兼容的。如果需要,它可以从远程执行获取操作。它显示未跟踪、修改、添加、删除和暂存的文件。通过显示远程未合并的提交和本地未推送的提交,它与远程进行差异比较。它还可以在摘要或详细模式下甚至HTML中显示彩色编码结果。它使用locate而不是find,因为它速度无限快,并且甚至会提示更新您的locate数据库(如果它过时了)。
看起来编写一个脚本来完成这个任务非常容易。基本上,它需要遍历存储库,然后使用像git ls-files、git diff和git log这样的命令。
hg mercurial
回答。 - Serge Stroobandtgit for-each-repo
命令。 - VonCgit for-each-repo
循环中运行git rev-parse --git-dir
命令序列:这将显示每个存储库的根文件夹。 - VonC你可以运行 git for-each-repo --config=<config> -- xxx args
:这将在$PATH
中查找git-xxx
可执行文件,其中你可以放置任意数量的逗号。 - VonC