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

时间:2013-02-15 03:58:20

标签: git github

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

利用此样板作为新项目的基础,正确的git过程是什么?我可以想到两个选择:

  1. boilerplate分叉到newproject并开始。我无意将newproject更改回boilerplate
  2. 克隆boilerplate并将远程原点更新为新的清洁仓库。
  3. 我倾向于第二个选项,因为它感觉像是样板代码中的一个很好的清晰分割。这样做会让我失去任何酷炫的git可能性吗?

7 个答案:

答案 0 :(得分:13)

考虑到您将从boilerplate GitHub项目中包含的模板的一个将项目存储在Github上,我会:

  • 在GitHub上创建一个新的空仓库(没有boilerplate的链接,没有need for a fork
  • 克隆它
  • 克隆boilerplate在磁盘上的单独位置
  • 将正确的模板从本地boilerplate克隆复制到新的本地克隆的Github存储库
  • git addgit commit)将该特定模板推送回新的Github仓库。
  • 从那里开始工作

答案 1 :(得分:3)

“Fork”不是Git概念。你是不是把Git和Github混淆了?如果你的意思是在Github上分配项目,那么它就像克隆repo一样,克隆听起来就像你正在寻找的那样。你永远不会把更改推回到“样板”回购。但是,您可以使用合并或重新定位将样板存储库的更新引入到衍生它的项目中。如果没有这样的东西是可取的,那么为什么甚至用Git做呢?只需制作目录的递归副本,然后从那里开始。

答案 2 :(得分:3)

@ VonC的答案没有错,但您可以使用hub创建a one-liner,根据您的种子回购有效地启动新的仓库(本地和远程):

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

在你的shell中:

$ clonefork user/seed-repo

by" cloneforking"你的种子回购,你也会得到a network graph显示所生成的所有回购。

答案 3 :(得分: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
}

答案 4 :(得分:1)

我刚刚发布了CLI工具,那就是基于现有仓库创建新项目,甚至在Github上远程创建自己的项目。 https://github.com/theJacobDev/binit

答案 5 :(得分:1)

这并不是您要问的,但对解决类似问题也可能会有帮助。

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

它可以:

  1. 在Github上创建新的存储库
  2. 与本地目录同步
  3. 应用模板(例如带有徽章的自述文件,CI配置,许可内容等)
  4. 为Github存储库配置webhooks
  5. 邀请合作者

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

答案 6 :(得分:0)

我也创建了一种工具来解决此类问题。我developed a conceptdictators一起决定了文件系统的一部分。

用模板/样板-project配置一个独裁者。像这个例子: 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"
  }
}