我如何cd到具有带有bash的.git文件夹的最接近的父文件夹



在控制版本的项目时,我通常会进入嵌套文件夹。使用cd ../../有点麻烦,所以我想知道是否有一种方法可以将CD中的别名定义给父母,直到使用.git文件夹到达文件夹,还是到达~

所以假设

  • ~/my-project是git存储库
  • 我的CWD是~/my-project/deeply/nested/folder/structure
  • 我运行命令,并将CD'到~/my-project

可以做什么命令?我需要bash函数吗?

您要寻找的命令是git rev-parse --show-toplevel,您可以制作使用它的bash函数。

gr() {
    cd "$(git rev-parse --show-toplevel)"
}

我也有~/.gitconfig

[alias]
    root = rev-parse --show-toplevel

使此命令看起来更合理。

我认为您已经拥有的答案很好(可能更有效(,但是实现这一目标的一种基本方法是使用循环:

until [ -d .git ]; do cd ..; done

也就是说,进入父目录,直到目录.git存在为止。

如果从git repo的外部运行命令,请防止无限循环,您可以添加基本检查:

until [ -d .git ] || [ "$PWD" = "$p" ]; do p=$PWD; cd ..; done

我不确定它的便携性如何,但是在我的系统上,我有一个可以使用的可变$OLDPWD

until [ -d .git ] || [ "$PWD" = "$OLDPWD" ]; do cd ..; done

再次回答,但我有一个脚本,如下所示:

#!/bin/bash
filename=$1
[[ ! ${filename} ]] && echo "no filename" && exit -1
path=$(pwd)
while [[ "${path}" != "" && ! -e ${path}/${filename} ]]; do
   path=${path%/*}
done
[[ "${path}" == "" ]] && exit -1;
cd ${path}

您将在哪里进行findup .git(又可以变成别名(

最新更新