Bash 用于从模板创建新 GitHub 存储库的脚本

Bash script to create new GitHub repository from template

我正在编写一个 bash 脚本,它可以从我已经创建的 GitHub 模板初始化一个新的存储库。我想要脚本复制 this GitHub help doc 中列出的步骤,但我不知道如何从命令行使用 GitHub 模板。

我在 WSL2 上使用 Ubuntu 18.04。我已经定义了一个函数 project()(见下文)接受一个输入(新项目的名称)并且应该执行以下操作:

  1. cd 到我的主目录
  2. 调用 python 脚本 create_project.py 在本地创建新项目的文件夹并在 GitHub
  3. 上创建远程仓库
  4. cd 到新项目的本地目录
  5. 从我的模板初始化一个 repo
  6. 在 GitHub 上连接到我的远程仓库(在第 2 步中创建)
  7. 添加
  8. 提交
  9. 推送
#!/bin/bash
function project() {
    cd /home/levicrews
    python3 create_project.py 
    cd /home/levicrews/
    git init --template=</home/levicrews/template-project>
    git remote add origin git@github.com:levicrews/.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 的 "Use this template" 行为?

如果模板项目不是 git 存储库,您可以在初始化之前复制它:

#!/bin/bash
function project() {
    cd /home/levicrews
    cp -a /home/levicrews/template-project 
    python3 create_project.py 
    cd /home/levicrews/
    git init
    git remote add origin git@github.com:levicrews/.git
    git add .
    git commit -m "Initial commit"
    git push -u origin master
}

如果模板项目已有 .git 目录,您需要将其删除:

#!/bin/bash
function project() {
    cd /home/levicrews
    cp -a /home/levicrews/template-project 
    rm /.git
    python3 create_project.py 
    cd /home/levicrews/
    git init
    git remote add origin git@github.com:levicrews/.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 -