[英]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
:r
从abcd.xyz
等文件名中删除尾随后缀,留下abcd
所以这里!$:t:r
会被读成{(!$):t}:r
。 因此!$:t:r
==> repo_url
所以它会cd
到repo_url
要自己调试,请使用:p
,它只打印前面的命令而不执行它。 相当于echo
按确切顺序运行以下命令
git clone http://repo_url.git
!$:p
==> http://repo_url.git
(或echo !$
)!$:t:p
==> repo_url.git
(或echo !$:t
)!$: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。
我不太喜欢cdls
或gitclone
等具有特殊名称的别名,因为在新系统上我不记得原来的命令了。 这就是为什么我喜欢以下别名解决方案的原因:
## 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.