我创建了一个 Laravel “样板”项目,其中包含我常用的功能/库。
使用这个样板作为新项目的基础的正确 git 过程是什么?我可以想到两个选择:
- 叉
boilerplate
到newproject
并开始。我无意将newproject
更改拉回boilerplate
. - 克隆
boilerplate
并将远程源更新为新的干净存储库。
我倾向于第二个选项,因为它感觉像是与样板代码的一个很好的干净分离。这样做我会失去任何很酷的 git 可能性吗?
2019 年 6 月更新,6 年后:
请参阅“使用存储库模板生成新存储库”
跨代码库共享样板代码是软件开发中的一种固定模式。
使用我们最喜欢的工具和目录结构引导一个新项目可以帮助程序员从想法变成“Hello world!” 效率更高,手动配置更少。今天,我们很高兴引入存储库模板,使样板代码管理和分发成为 GitHub 上的一等公民。
要开始使用,您只需将存储库标记为模板,您就可以立即使用它来生成包含模板存储库的所有文件和文件夹的新存储库。
每个模板存储库都有一个名为的新 URL 端点
/generate
,可让您更有效地分发模板
2013年的原始答案:
考虑到您将从GitHub 项目中包含的模板之一boilerplate
将项目存储在 Github上,我会:
boilerplate
,不需要 fork)boilerplate
到磁盘上的单独位置boilerplate
克隆复制到新的本地克隆 Github 存储库git add
, git commit
) 将该特定模板推回您的新 Github 存储库。“叉子”不是 Git 的概念。你把 Git 和 Github 混为一谈了吗?如果你的意思是在 Github 上 fork 项目,那么它与克隆 repo 相同,克隆听起来就像你要找的一样。您永远不会将更改推回“样板”存储库。但是,您可以使用合并或变基将样板存储库的更新拉入从它衍生的项目中。如果没有这样的事情是可取的,那为什么还要用 Git 做呢?只需制作目录的递归副本,然后从那里开始。
按照@VonC 的指示,我为我的终端创建了一个函数并将其粘贴到我的别名中。
每次我开始一个新项目时,我都会在 GitHub 上创建一个 repo,获取确切的项目名称,然后在我的终端上输入“bp newProject”
bp () {
# Clone the boilerplate project from GitHub
git clone https://github.com/username/boilerplate.git;
# Rename the boilerplate folder to newProject
mv boilerplate "$@";
# Access the newProject folder
cd "$@";
# Delet the .git folder
rm -rf .git;
# Initialize git
git init;
# Add;
git add .;
# Commit using 'initial setup; as message;
git commit -m 'initial setup';
# And push it
git remote add origin https://github.com/username/"$@".git;
git push -u origin master
}
我刚刚发布了 CLI 工具,即基于现有 repo 创建新项目,甚至在 Github 上远程创建自己的项目。 https://github.com/theJacobDev/binit
这不完全是您要问的,但它也可能有助于解决类似的问题。
有一个工具可以从yaml
配置文件https://github.com/g4s8/gitstrap引导 Github 存储库
它可以:
因此您可以为类似项目编写模板,而不是创建样板仓库,并在使用该工具创建新的 Github 仓库时使用配置文件应用它们。
我也创建了一个工具来解决这类问题。我与独裁者一起开发了一个概念,该概念决定了文件系统的某些部分。
独裁者使用模板/样板项目配置。像这个例子: https ://github.com/tomasbjerre/dictator-react-boilerplate
独裁者配置dictatables,例如:
{
"message": "Copy react-boilerplate",
"actions": [
{
"beSupersetOfJsonFile": "react-boilerplate/package.json",
"target": "package.json"
},
{
"copyFrom": "react-boilerplate",
"target": "."
},
{
"haveLineContaining": ["*.tgz"],
"target": ".gitignore"
}
]
}
这个独裁者可以作为命令行工具运行:
npx dictator-react-boilerplate
或者让它与你的构建工具一起运行,也许像:
{
"name": "react-boilerplate-example",
"version": "1.2.3",
"description": "asdasasd",
"scripts": {
"prepare": "dictator-react-boilerplate"
},
"devDependencies": {
"dictator-react-boilerplate": "0.0.8"
}
}