首页 > 解决方案 > 将 git 分支更改为子目录

问题描述

我有几个带有 git 分支的子文件夹的根文件夹。我使用这些建议将 git 分支更改为每个子模块:

alias gch='git checkout'
gchb() { gch $(gbr -r | grep "$1" | awk '{print substr(""$1"",8,length)}'); }

如何在每个子目录中执行此命令?

标签: bashgit

解决方案


首先,不需要同时使用两者grepawk在这种情况下:

gchb() { 
  gch $(gbr -r | awk '($0 ~ '"$1"'){print substr(""$1"",8,length)}'); 
}

你可能会使用类似的东西:

for subdir in "${DIR}"/*; do
  [[ -d "${subdir}" ]] && gchb "${subdir}"
done

您可能还可以使用findwith-exec选项来执行此类任务,例如:

1)在一个单独的脚本中定义你的别名和函数(例如我们称之为.gittutilsrc),可以加载source

#!/bin/bash

alias gbr='git branch'
alias gch='git checkout'

gchb() { 
    gch $(gbr -r | awk '($0 ~ '"$1"'){print substr(""$1"",8,length)}'); 
}

2)像这样在find中使用它:

find "${DIR}" -type d -a -maxdepth 1 -exec bash -c "source .gittutilsrc && gchb {}" \;

注意:-mexdepth 1在这里使用是为了避免子子*文件夹中的递归。


推荐阅读