git:快速命令转到工作树的根目录

elm*_*rco 40 git bash scripting

我想要一个简单的git命令来访问存储库的"根".

我开始使用脚本,但想到我无法更改shell的活动目录,我不得不做一个功能.不幸的是,我不能用非破折号形式"git root"直接调用它.

function git-root() {
 if [ -d .git ]; then
  return 0
 fi

 A=..
 while ! [ -d $A/.git ]; do 
  A="$A/.."
 done
 cd $A
}
Run Code Online (Sandbox Code Playgroud)

你有更好的解决方案吗?(功能写得很快,欢迎提出建议)

Pet*_*ter 56

之前已经问过,有没有办法在一个命令中获取git根目录?他写道,复制@ docgnome的答案

cd $(git rev-parse --show-cdup)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,请创建一个别名:

alias git-root='cd $(git rev-parse --show-cdup)'
Run Code Online (Sandbox Code Playgroud)

  • 我会使用cd $(git rev-parse --show-toplevel).当你在根目录时,要注意边缘情况.我想这之前没有. (19认同)
  • downvoted,因为虽然关闭,它不会处理已在根目录中.请参见http://stackoverflow.com/a/14127035/125349 (11认同)
  • 为什么不使用git的别名机制? (4认同)
  • alias git-root ='cd ./$(git rev-parse --show-cdup)' (3认同)

Chr*_*tin 44

更简单,窃取是否有办法在一个命令中获取git根目录?,并制作一个别名(由彼得建议)

cd "$(git rev-parse --show-toplevel)"
Run Code Online (Sandbox Code Playgroud)

无论您是否在根目录中,这都有效.

  • 注意,这也支持目录名中的空格! (2认同)

Wil*_*ton 15

如果你在git root的子目录中,Peter的上述答案很有用.如果你已经在git root中,那么它会让你回到$ HOME.为了防止这种情况,我们可以使用一些bash条件.

if [ "`git rev-parse --show-cdup`" != "" ]; then cd `git rev-parse --show-cdup`; fi
Run Code Online (Sandbox Code Playgroud)

所以别名变成:

alias git-root='if [ "`git rev-parse --show-cdup`" != "" ]; then cd `git rev-parse --show-cdup`; fi'
Run Code Online (Sandbox Code Playgroud)


Fra*_*ace 6

$ git config alias.root '!pwd'
$ git root
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是……git将外壳的工作目录设置为存储库的根目录。但是,最好不要依赖此行为。 (2认同)