在控制版本的项目时,我通常会进入嵌套文件夹。使用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
(又可以变成别名(