我正在编写一个bash脚本,可以从我已经创建的GitHub模板初始化一个新的存储库。我希望脚本能够复制这个GitHub帮助文档中列出的步骤,但我无法弄清楚如何从命令行使用GitHub模板。
我在WSL2上使用Ubuntu 18.04。我已经定义了一个function project()
(见下文),它接受一个输入(新项目的名称),并且应该执行以下操作:
- cd到我的主目录
- 调用python脚本
create_project.py
,在本地创建新项目的文件夹,并在GitHub上创建远程仓库 - cd到新项目的本地目录
- 从我的模板初始化一个repo
- 连接到GitHub上的远程仓库(在步骤2中制作)
- 加
- 承诺
- 推
#!/bin/bash
function project() {
cd /home/levicrews
python3 create_project.py $1
cd /home/levicrews/$1
git init --template=</home/levicrews/template-project>
git remote add origin [email protected]:levicrews/$1.git
git add .
git commit -m "Initial commit"
git push -u origin master
}
import sys
import os
from github import Github
path = "/home/levicrews/"
username = "" #Insert your github username here
password = "" #Insert your github password here
def create_project():
folderName = str(sys.argv[1])
os.makedirs(path + str(sys.argv[1]))
user = Github(username, password).get_user()
repo = user.create_repo(sys.argv[1])
print("Succesfully created repository {}".format(sys.argv[1]))
if __name__ == "__main__":
create_project()
不幸的是,我的所有模板文件最终都在新repo的/.git目录中(从读取git init
上的文档,我现在意识到这是--template
标志的预期行为)。我可以对我的脚本进行哪些更改以从GitHub复制"Use this template"行为?
分析解答
如果template-project不是git存储库,您可以在init之前复制它:
#!/bin/bash
function project() {
cd /home/levicrews
cp -a /home/levicrews/template-project $1
python3 create_project.py $1
cd /home/levicrews/$1
git init
git remote add origin [email protected]:levicrews/$1.git
git add .
git commit -m "Initial commit"
git push -u origin master
}
如果template-project已经有.git目录,则需要将其删除:
#!/bin/bash
function project() {
cd /home/levicrews
cp -a /home/levicrews/template-project $1
rm $1/.git
python3 create_project.py $1
cd /home/levicrews/$1
git init
git remote add origin [email protected]:levicrews/$1.git
git add .
git commit -m "Initial commit"
git push -u origin master
}
如果git历史记录很大,则复制到.git并再次删除.git文件夹将效率低下。您可以使用以下hack:
git archive --format=tar --remote=/home/levicrews/template-project master | tar xf -