从现有的“样板”存储库创建新项目

17

我创建了一个 Laravel "模板" 项目,其中包含我常用的功能/库。

对于将此模板用作新项目基础的正确 git 过程,有两个选项:

  1. boilerplate fork 为 newproject 并开始使用。我没有任何意图将 newproject 更改合并回 boilerplate
  2. 克隆 boilerplate 并将远程源更新为一个新的干净仓库。

我倾向于第二个选项,因为它感觉像是与模板代码分离得很干净。这样做会失去一些很酷的 git 功能吗?


6年后,GitHub终于提出了这个功能!“存储库模板”已成为现实。请参见下面我编辑过的答案 - VonC
7个回答

20

2019年6月更新,六年后:

请参见 "使用存储库模板生成新存储库 "

在软件开发中,跨代码库共享样板代码是一种持续的模式。
使用我们喜欢的工具和目录结构引导新项目可以帮助程序员更高效地从想法到“Hello world!”,并减少手动配置。

今天,我们很高兴地介绍了存储库模板,使样板代码管理和分发成为 GitHub 上的一流公民。

要开始使用,请将存储库标记为模板,您将立即能够使用它来生成具有所有模板存储库文件和文件夹的新存储库。

https://github.blog/wp-content/uploads/2019/06/repository-template.gif

每个模板仓库都会获得一个名为/generate新URL端点,使您能够更有效地分发您的模板。

2013年原始回答:

考虑到您将使用boilerplate GitHub项目中包含的模板之一存储您的项目,我建议:

  • 在GitHub上创建一个新的空仓库(与boilerplate没有关联,不需要fork
  • 克隆它
  • 在磁盘的另一个位置克隆boilerplate
  • 从本地boilerplate克隆中复制正确的模板到新的本地克隆Github存储库中
  • git addgit commit)将该特定模板推送回您的新Github存储库。
  • 从那里开始工作

21
另一种选择是克隆 "boilerplate",删除 ".git" 文件夹,然后运行命令 git initgit add .git commit - aragaer
@aragaer 不要忘记 boilerplate 可能包含许多模板供您选择(这可能不是这种情况),此外,您需要重置远程 origin url。我认为我的方法更容易。 - VonC
删除 .git 会重置所有 git 相关内容。但我同意使用多个模板的做法。 - aragaer

3

@VonC的答案没有问题,但你也可以使用hub来创建一行命令,有效地在本地和远程基于您的种子库初始化新的存储库:

clonefork() {
    hub clone "$1"
    cd "${1##*/}"
    hub fork
}

在你的命令行中:
$ clonefork user/seed-repo

通过"clone forking"您的种子仓库,您还可以获得显示所有由其生成的仓库的网络图形可视化器

3
"Fork"不是Git的概念。你是不是把Git和Github混淆了?如果你指的是在Github上fork项目,那么这就相当于克隆repo,而克隆听起来就像是你要找的东西。你只需要永远不将更改推回“boilerplate” repo。但是,你可以使用合并或变基(merging or rebasing)将boilerplate repo的更新合并到其衍生项目中。如果没有任何类似的需求,那为什么还要用Git呢?只需递归复制目录,并从那里开始即可。

这需要您手动设置上游 - 否则您会将更改推送到您的样板存储库!https://help.github.com/articles/changing-a-remote-s-url/ - Brandon Kuczenski

2

根据@VonC的指示,我创建了一个终端函数并将其粘贴到我的别名中。

每次我开始一个新项目时,我都会在GitHub上创建一个存储库,获取确切的项目名称,然后只需在终端上键入“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
}

1

虽然不完全符合您的要求,但它可能有助于解决类似的问题。

有一个工具可以从 yaml 配置文件引导 Github 存储库 https://github.com/g4s8/gitstrap

它可以:

  1. 在 Github 上创建新存储库
  2. 与本地目录同步
  3. 应用模板(如带徽章的 README、CI 配置、许可证等)
  4. 为 Github 存储库配置 Webhooks
  5. 邀请协作者

因此,您可以为类似的项目编写模板,而无需创建样板存储库,并在使用该工具创建新的 Github 存储库时使用配置文件应用它们。


1

0

我也创建了一个解决这类问题的工具。我与独裁者一起开发了一个概念,用于指定文件系统的部分。

独裁者是使用模板/样板项目进行配置的。就像这个例子: https://github.com/tomasbjerre/dictator-react-boilerplate

独裁者配置可被指定的表格,例如:

{
  "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"
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接