做git clone的更好方法

时间:2012-08-21 15:54:50

标签: git shell automation

这是懒惰的程序员请求。我想创建一个shell脚本自动执行以下过程:

git clone <remote-repo-url>
cd <cloned-folder>
open <cloned-folder> 

因此,这里的想法是克隆一个网址,然后立即cd进入cloned-folder。这里的技巧是从url模式中识别cloned-folder

现在我们可以假设url结构采用这种模式.../<cloned-folder>.git,即网址。

我想知道我们是否可以使用awk或类似的工具。我猜的部分是找到一个合适的regex,我猜。

USE CASE :这里的用例是如果你克隆了一个url,你想尽快进入repofolder。如果您要运行gitgit log之类的mate .命令,这是我们99%的时间做的预先要求。

提前致谢。

5 个答案:

答案 0 :(得分:13)

执行此操作的bash函数(也适用于zsh):

function lazyclone {
    url=$1;
    reponame=$(echo $url | awk -F/ '{print $NF}' | sed -e 's/.git$//');
    git clone $url $reponame;
    cd $reponame;
}

awk命令在最后/之后打印部件(例如从http://example.com/myrepo.gitmyrepo.git)。 sed命令删除尾随.git

用法:

$ pwd
~/
$ lazyclone https://github.com/dbr/tvdb_api.git
tvdb_api
Cloning into 'tvdb_api'...
remote: Counting objects: 1477, done.
remote: Compressing objects: 100% (534/534), done.
remote: Total 1477 (delta 952), reused 1462 (delta 940)
Receiving objects: 100% (1477/1477), 268.48 KiB | 202 KiB/s, done.
Resolving deltas: 100% (952/952), done.
$ pwd
~/tvdb_api

答案 1 :(得分:2)

使用git clone,您可以指定要克隆到的文件夹,而不是允许自动命名。

dir=myclone
git clone git://somerepo "$dir"
cd "$dir"
open "$dir"

答案 2 :(得分:1)

@ dbr答案的改进:

function lazyclone {
    reponame=${1##*/}
    reponame=${reponame%.git}
    git clone "$1" "$reponame";
    cd "$reponame";
}

借助Bash的参数扩展,我们可以摆脱awksed

答案 3 :(得分:0)

bash参数版本相当不错,我选择了basename因为它看起来更干净

function gclocd {
  # git clone and enter the cloned file
  if [[ -z "$2" ]]; then
    reponame=$(basename "$1" ".git");
  else
    reponame=$2;
  fi
    git clone "$1" "$reponame";
  cd "$reponame";
}

我使用短暂的令人难忘的tab-completable函数名称来处理这样的一堆事情,并将它们作为别名/函数放在我的.bashrc中,例如gcmmt git commit -mlazy可能已经是shell中事物的前缀,这意味着每次输入都要多一点......

答案 4 :(得分:0)

我们可以cd进入最新创建的目录,而不是从url获取目录名。这是相应的shell脚本:

gclcd() {
    git clone --recursive $* && cd "$(ls -t | head -1)"
}