目前,我正计划为我的公司编写一个python模板,以便在所有不同的项目中拥有一致的结构,并传播一些最佳实践。
要做到这一点,一方面使用Cookiecutter方法生成模板,另一方面使用GitHub模板存储库功能似乎是个好主意。现在我很好奇是否可以将这两种方法结合起来,我脑海中有这样的想法:
- 用户使用GitHub模板存储库功能在网站内创建一个新的GitHub repo
- 然后他在本地机器上克隆它
- 然后,他可以在本地运行Cookiecutter,并用他的详细信息填充项目
- 最后,他只需要将初始化良好的模板推回到GitHub并覆盖旧的默认值
有可能使用这样的工作流程吗?我该怎么做?
当然,如果GitHub能够在其GitHub模板存储库功能中集成Cookiecutter,那会更酷;喜欢在网站上问你所有的问题。
GitHub模板功能很好,因为(a(它显示在"创建回购";菜单和(b(新的repo保留了对它在GitHub中的来源的理解,GitHub是有用的元数据。
也就是说,除此之外,该功能似乎相当有限。你可以将烹饪机的工作流程集成到其中,我们已经对此进行了研究,但我不确定上面的两个小附加值是否值得尝试将这两种方法混合使用。
如果你决定走这条路,你能做的最好的事情可能就是在模板中有一个非常好的README.md,告诉你该做什么(即,一旦你克隆了repo,就运行cookiecutter,检查更改,将其推送回去(。你也可以让新的repo包括一个GitHub操作,它本身运行cookiecutter,并检查更改,但在这一点上,你正在围绕三个工具(GitHub模板、GitHub动作和cookiecutter(构建一个Rube Goldberg机器,而这三个工具并不是真正设计用来使用的。
在现有的回购中使用cookiecutter的一个缺点是,它会在的回购中创建一个新的文件夹,而不是替换整个回购,我认为没有任何简单的方法可以解决这个问题。对于你的用例来说,这可能没问题?甚至令人向往?(例如,包含微服务的单回购(。
附带说明:如果你只有几个模板,GitHub模板会很好地工作,但模板周围没有元数据,所以使用它们的人必须自己弄清楚哪些模板是最新的、受支持的等等,所以它目前在大型组织中的扩展性不是很好。
我认为你最好用非此即彼。
我有同样的任务。在这篇文章之后(这是针对gitlab的,因为github有点不同(,这个工作流程对我有效:
- 在github中创建一个完全空的存储库。写下存储库名称(例如
cookiecutter-test
(和存储库链接(例如。https://github.com/nepentabits/cookiecutter-test.git) - 在您的本地机器中,创建cookie项目,使用与repo同名的slug名称(您将填充的项目的顶部目录((模板将是您的,在我的情况下repo是
cookiecutter-test
(
$ cookiecutter https://xx@dev.azure.com/xx/ama-template-data-science
$ ...
$ ls
$ cookiecutter-test
- 进入本地包(在本例中为
cookiecutter-test
(,并完全按照相同的顺序执行git
命令。这是因为在大多数git本地安装中,分支被称为master
,而在github中,他们称之为main
,要在本地更改分支名称,必须首先进行提交。此外,如果github repo完全为空,这也会起作用。替代
$ git init
$ git add .
$ git commit -m "First commit with cookiecutter scaffold"
$ git branch -M main
$ # the repo link should yours one
$ git remote add origin https://github.com/nepentabits/cookiecutter-test.git
$ git push -u origin main
在最后一步中,我们将询问您的github名称和https令牌。