我有一个文件夹 /c/Tools,其中包含三个文件夹。
我想要一个像下面这样的命令
$ ls --show-repositories
Run Code Online (Sandbox Code Playgroud)
Tools 不是 git 存储库,但 Tools/MyProject 和 Tools/MyApp 都是。我想要的输出是:
drwxr-xr-x 1 0018121 Domain Users 0 Dec 14 14:33 MyProject/ (develop)
drwxr-xr-x 1 0018121 Domain Users 0 Dec 14 14:17 Data/
drwxr-xr-x 1 0018121 Domain Users 0 Dec 14 12:08 MyApp/ (master)
-rw-r--r-- 1 0018121 Domain Users 399K Aug 4 10:41 readme.txt
-rw-r--r-- 1 0018121 Domain Users 136K Aug 4 10:20 image.jpg
Run Code Online (Sandbox Code Playgroud)
所以从父文件夹我可以判断子文件夹是否是当前有效的 git 存储库(以及当前签出的分支)
谢谢
把事情简单化; 查找目录.git并从其包含的目录中运行您的命令。还可以输入 a-print以查看它在哪个目录中运行:
find . -type d -name .git -print -execdir git symbolic-ref --short HEAD \;
Run Code Online (Sandbox Code Playgroud)
(好吧,实际上-print显示目录它找到- ./path/to/repo/.git,而不是它./path/to/repo/本身。但这是一个小小的不便。)
编辑:您可以通过以下方式生成您的 OP 中要求的 EXACT 输出:
paste <(ls -ld *) <(for i in *; do if [ -d "$i"/.git ] ; then echo "($(git --git-dir="$i"/.git symbolic-ref --short HEAD))"; else echo; fi; done)
Run Code Online (Sandbox Code Playgroud)
这没有我能看到的任何真正的缺点。
按照设计,它只能找到顶级 git repos,即如果您的“数据”目录(在您的示例中) ls输出中)具有 git 存储库的子目录,它们将不会被列出,而使用find我之前给出的命令,它们会被列出。但正如我所说,这是设计使然。
这不会在ls. 您可以通过将 a 添加--color=always到嵌入式ls命令:
paste <(ls -ld --color=always *) <(for i in *; do if [ -d "$i"/.git ] ; then echo "($(git --git-dir="$i"/.git symbolic-ref --short HEAD))"; else echo; fi; done)
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,这会在所有输出的末尾产生一个额外的换行符。那好吧; IMO 没什么大不了的。
对于 Mac OS,ls没有--color标志,因此使用以下命令强制颜色输出:
paste <(CLICOLOR_FORCE=true ls -ld *) <(for i in *; do if [ -d "$i"/.git ] ; then echo "($(git --git-dir="$i"/.git symbolic-ref --short HEAD))"; else echo; fi; done)
Run Code Online (Sandbox Code Playgroud)
小智 0
可能是这样的:
find YOUR_DIR -maxdepth 1 -type d -exec echo -n "{} " \; -exec git --git-dir={}/.git symbolic-ref -q --short HEAD \;
Run Code Online (Sandbox Code Playgroud)
输出示例:
. fatal: Not a git repository: './.git'
./zabbix2 master
./dnsmasq fatal: Not a git repository: './dnsmasq/.git'
./puppet-network master
./resolv_conf fatal: Not a git repository: './resolv_conf/.git'
./old fatal: Not a git repository: './old/.git'
./php_ini fatal: Not a git repository: './php_ini/.git'
./stdlib fatal: Not a git repository: './stdlib/.git'
./mcollective master
./netlogon master
./debian master
./apt fatal: Not a git repository: './apt/.git'
Run Code Online (Sandbox Code Playgroud)
您可以使用第一个“exec”命令来更改所需的文件夹输出格式。
| 归档时间: |
|
| 查看次数: |
3502 次 |
| 最近记录: |