我正在尝试使用回购作为不同项目的起点。
我确实遵循了这个要点:https://gist.github.com/mdentinho/6258238
从gist开始,我创建了一个如下所示的别名:
boilerplate-website = !git clone -o website-boilderplate https://[email protected]/user/website-boilderplate.git "$1" && cd "$1" && rm readme.md && touch readme.md && rm -rf .git && git init && git add -A && git commit -m 'First Commit'
但看起来CD部分不起作用,因为我仍然在目录中运行命令,而不是在新克隆的目录中。
另外,因为这个,我得到这个错误,别名没有完成所有命令(它只是克隆,就是这样)。
Cloning into 'test2'...
remote: Counting objects: 19, done.
remote: Compressing objects: 100% (18/18), done.
Unpacking objects: 100% (19/19), done.
remote: Total 19 (delta 1), reused 0 (delta 0)
rm: readme.md: No such file or directory
为什么不等待克隆完成?我经常做用户
git clone {repo} {folder name} && cd {folder name}
这很好。
谢谢你的帮助
作为PetSerAl noted in a comment,cd
影响执行cd
命令的shell,以及shell本身产生的任何子命令/子shell;但它不会影响任何“外层”外壳,例如您键入git boilerplate-website
的外壳。 (别名中的!
表示:“通过子shell运行它。”)
这对你意味着你无法达到你想要的方式。你需要你的shell - 你输入一些命令的shell - 来执行cd
命令。
这样做的方法是使用shell函数或shell别名(后者与Git别名不同)。定义shell函数或shell别名的细节根据你使用的shell而略有不同,但在bash和bash-like shell中常见的有:
func() {
commands
}
作为定义函数的方法(例如在$HOME/.bashrc
中),并且:
alias name='expansion with arguments'
成为定义别名的方法。因此你可以写:
newwebsite() {
case $# in
1) ;;
*) echo "usage: newwebsite <name>" 1>&2; return 1;;
esac
git clone -o website-boilderplate \
https://[email protected]/user/website-boilderplate.git \
"$1" || { echo "git clone step failed, aborting" 1>&2; return 1; }
cd "$1" &&
rm readme.md &&
touch readme.md &&
rm -rf .git &&
git init &&
git add -A &&
git commit -m 'First Commit'
}
(我把它写成一个函数,试图让它尽可能地可读,同时保持你的结构完整。)注意你将在它前面没有git
命令运行它,即newwebsite foo
而不是git newwebsite foo
。