我在目录中有git存储库。例如,
$ ls
repo1 repo2 repo3 repo4
我想快速查看所有存储库的最后k个提交日志。(k大约是3.)
对于repo1,我可以打印最后3个提交日志,然后返回到该目录,如下所示:
$ cd repo1; git log -3 ; cd ../
但我不想在所有存储库中重复此操作。我正在寻找一种轻松实现此目标的聪明方法。(也许使用xargs?)
我正在使用Bash。谢谢。
通常,使用毫无意义xargs
,因为find
可以自己执行内容:
find ~/src/ -maxdepth 2 -name .git -execdir git log \;
说明:
find ~/src/
在〜/ src /下查找内容。如果需要,可以传递多个参数,可能是由于Shell glob所致。
-maxdepth 2
不要深入地递归。由于命中文件系统相对较慢,因此可以节省大量时间。
-maxdepth 2
会找到〜/ src / .git(如果存在)和〜/ src / foo / .git,因此无论您传递repo目录本身还是仅传递包含所有存储库的目录,都可以使用它。
-maxdepth 1
如果您只想自己传递repo目录,它将可以工作(并且在IO上更容易)。
-maxdepth 3
可能偶尔会在某些源层次结构中使用,但对于它们,您最好将其他目录find
首先传递给它们。
-name .git
我们正在寻找.git
目录(或文件!是的,git会这样做),因为-execdir
通常会接受一个{}
参数,并将其传递给命令。传递的文件名将只是基本名称(这样,例如,mv
可以正常工作……请记住,find
通常可以与文件一起使用),并且将工作目录设置为包含该文件的目录。
-execdir ... \;
在仓库本身中运行命令。命令(here ...
)可以包含任何内容,尤其是-
不会被find
自身解释的选项...除了{}
单词中任何地方是文件名之外,孤行;
符都会终止命令(但在此处为shell逸出),并+
终止命令但一次传递多个文件。
对于此用例,我们不需要传递文件名,因为运行程序的目录提供了所有必需的信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句