繁体   English   中英

git 克隆并 cd 进入

[英]git clone and cd into it

如果我想在一行中创建一个目录并将目录更改为所有目录,我可以执行以下操作:

mkdir dir_name && cd $_

我怎样才能对git clone做同样的事情?

命令git clone repo_url && cd $_显然不起作用,因为没有像repo_url这样的目录。 但是有可能在一行中完成吗?

如果您想自动查找名称,您可以尝试以下操作:

git clone http://repo_url.git && cd "$(basename "$_" .git)"

这样您就不必为git指定文件夹名称。

您可以为 git clone 命令添加目录名称:

git clone repo_url my_repo_dirname && cd "$_"

将以下内容添加到您的~/.bashrc 别忘了来源!

function gccd { git clone "$1" && cd "$(basename $1)"; }
export -f gccd

gccd 代表 git clone 和 cd。 这是别名的等效功能。 现在您可以输入: gccd <repo> 它会做你想要的。

您可以使用以下

git clone http://repo_url.git && cd "!$:t:r"

Imp:不要忘记cd命令中的双引号,否则它在其他一些 shell 或 Windows 中的 Git Bash 中不起作用。

它是如何工作的?

第一个命令是显而易见的git clone命令。 第二个cd命令很有趣。

现在有一种称为命令历史的字指示符

  • !$是最后一个命令运行的最后一部分

这里最后运行的命令是git clone http://repo_url.git 该命令由三部分组成。 1. git , 2. clone和 3. http://repo_url.git http://repo_url.git是最后一部分。 因此!$ ==> http://repo_url.git

然后有一个叫做Word Modifiers的东西,它修改它前面的字符串。

  • :t删除所有前导文件名组件,留下尾部

所以这里!$:t会被读成(!$):t 因此!$:t ==> repo_url.git

  • :rabcd.xyz等文件名中删除尾随后缀,留下abcd

所以这里!$:t:r会被读成{(!$):t}:r 因此!$:t:r ==> repo_url

所以它会cdrepo_url

要自己调试,请使用:p ,它只打印前面的命令而不执行它。 相当于echo

按确切顺序运行以下命令

  1. git clone http://repo_url.git
  2. !$:p ==> http://repo_url.git (或echo !$
  3. !$:t:p ==> repo_url.git (或echo !$:t
  4. !$:t:r:p ==> repo_url (或echo !$:t:r

重击功能:

m.git.clone(){
    local url="${1}" dir="${2}"
    if [[ "${dir}" == "" ]]; then 
        dir="$(basename "${url}" .git)"
    fi
    
    git clone "${url}" "${dir}" && cd "${dir}"
}

可以使用:

m.git.clone git@github.com:user/path.to.git

或者

m.git.clone git@github.com:user/path.to.git customDir

仅在成功时才可以工作和 cd。

我不太喜欢cdlsgitclone等具有特殊名称的别名,因为在新系统上我不记得原来的命令了。 这就是为什么我喜欢以下别名解决方案的原因:

## git extra features 
# - clone + cd 
function git() {
    if [ $1 = "clone" ]
    then 
        command git $@ && cd "$(basename "$_" .git)"
    fi
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM