我正在编写一个bash脚本,该脚本可以从已经创建的GitHub模板初始化一个新的存储库。我希望脚本复制this GitHub help doc中列出的步骤,但是我无法从命令行中找出如何使用GitHub模板。
我在WSL2上使用Ubuntu 18.04。我定义了一个函数project()
(见下文),该函数接受一个输入(新项目的名称),并应执行以下操作:
create_project.py
,该脚本在本地创建新项目的文件夹,并在GitHub上创建远程仓库#!/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 git@github.com: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()
不幸的是,我所有的模板文件最终都位于新存储库的/.git目录中(通过阅读git init
上的文档,我现在意识到这是--template
标志的预期行为) 。我可以对脚本进行哪些更改以复制GitHub中的“使用此模板”行为?
答案 0 :(得分:0)
如果template-project不是git存储库,则可以在初始化之前将其复制:
#!/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 git@github.com: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 git@github.com:levicrews/$1.git
git add .
git commit -m "Initial commit"
git push -u origin master
}
如果git历史记录很大,则复制到.git并再次删除.git文件夹将效率不高。您可以使用以下技巧:
git archive --format=tar --remote=/home/levicrews/template-project master | tar xf -