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

时间:2019-08-20 16:37:06

标签: python bash git github windows-subsystem-for-linux

我正在编写一个bash脚本,该脚本可以从已经创建的GitHub模板初始化一个新的存储库。我希望脚本复制this GitHub help doc中列出的步骤,但是我无法从命令行中找出如何使用GitHub模板。

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

  1. cd到我的主目录
  2. 调用python脚本create_project.py,该脚本在本地创建新项目的文件夹,并在GitHub上创建远程仓库
  3. cd到新项目的本地目录
  4. 从我的模板初始化存储库
  5. 连接到我在GitHub上的远程仓库(在步骤2中完成)
  6. 添加
  7. 提交
#!/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中的“使用此模板”行为?

1 个答案:

答案 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 -