【问题标题】:Set up a default directory structure on git init在 git init 上设置默认目录结构
【发布时间】:2013-05-03 16:21:44
【问题描述】:

我想通过在git init 命令上自动创建 .gitignore、README、LICENSE 和其他文件来优化我的 git 工作流程。

为此,我在http://git-scm.com/docs/git-initgit init 进行RTFM,它告诉我执行以下操作之一:

  1. 使用git init --template=<template_directory>,但很麻烦。
  2. 更改 $GIT_TEMPLATE_DIR 环境变量的内容,但我不想这样做。
  3. 设置init.templatedir 配置变量。现在我们开始讨论了!

所以我sudo mkdir /usr/share/git-core/templates/my_templatetouch 里面有一些文件,然后我vim ~/.gitconfig 并追加:

[init]
    templatedir = /usr/share/git-core/templates/my_template

git config -l 告诉我:

...
init.templatedir=/usr/share/git-core/templates/my_template
...

对自己很满意,我去我的开发游乐场目录并:

$ git init
Initialized empty Git repository in /the/current/directory
$ ls -a
.   ..  .git

太糟糕了...文件在哪里? :(

快速检查:

$ ls -a /usr/share/git-core/templates/my_template
.   ..  .gitignore  LICENSE README.md
$ git --version
git version 1.8.2.1

$ git init --template=/usr/share/git-core/templates/my_template 好像也不起作用。

那么我在这里做错了什么?配置指令不正确?错误的模板或其位置(我在 OSX 上)?模板应该是 git repo 吗?光秃秃的?

【问题讨论】:

  • 现在没时间写完整的答案,但所有模板文件都进入.git文件夹

标签: git templates


【解决方案1】:

您看到的行为是预期的git 行为:

如果您正确阅读了有关模板目录的手册:

模板目录

模板目录包含文件和 创建后将被复制到 $GIT_DIR 的目录。

从模板目录复制的文件放置在您的GIT_DIR 中,默认为您的 repo 根目录下的.git 目录。

git init 据我所知不支持工作树的模板。如果需要这种行为,您应该能够编写一些简单的 bash 别名或函数来为您执行此操作。

【讨论】:

  • 你完全正确!实际上,这些文件位于 .git 目录中。
  • 您能否创建一个包含这些起始文件的存储库,然后将其中的.git 目录用作您的模板目录?
【解决方案2】:

您可以做到,但需要一些额外的步骤。

  1. 创建你的默认目录结构,就好像它是一个普通的 repo:

    mkdir template && cd template
    git init && touch README.md && cat ~/.gitignore_global > .gitignore
    git add --all && git commit -m "init"
    

(严格来说,这里不需要最后一次提交,但你最终必须这样做,所以为什么不现在)

  1. 现在移除你的工作树并向上移动 .git 文件:

    mv .git/* ./ && rm -r README.md .gitignore .git
    
  2. 您现在可以将此设置为默认模板,但为了举例:

    mkdir ../myrepo && cd ../myrepo
    git init --template=../template
    

    (注意有趣的消息:Reinitialized existing Git repository...

  3. 现在重要的一步:(您的 repo 是最新的,但您的工作树不是):

    git reset --hard
    

    (如果您之前跳过提交,则必须在重置之前在这里提交)

以后,假设您已经设置了默认模板,您只需

git init && git reset --hard

(我没有直接参考,但this chapter 确实有帮助。)

【讨论】:

  • 如果您对这里实际发生的管道的更详细解释感兴趣,我很乐意解释,但本质上归结为您的 git 对象(和包)实际上是您的文件(以及提交和目录结构),如果您将它们正确存储在模板中,那么您可以在任何模板启动的存储库中恢复它们。当然这也可以用低级命令来完成,但是这样更容易避免错误。
【解决方案3】:

您可以创建一个模板存储库,每次您想创建一个新项目时克隆它。然后在调用 git init 之前删除 .git 文件夹并将内容复制到新项目中。假设您的模板存储库名为 project_template:

$ git clone project_template new_project
$ cd new_project
$ rm -rf .git
$ git init

不是一个理想的解决方案,但可以编写脚本。

这是对here提供的步骤的修改,专门针对使用GitHub。

【讨论】:

  • 虽然此链接可能会回答问题,但最好包含答案here 的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 感谢反馈,我已经重写了答案,直接在帖子中提供信息。
  • cp -r ... 的目的是什么?您可以改为 git clone project_template new_project
  • 避免@bummi,您插入的链接已损坏! :(
  • 在 GitHub 帮助中,当它来自 creating a repository from a template 时,方向不是直接克隆该 repo,而是通过 使用此模板 按钮进行复制。这样就不需要删除.git目录或运行git init
【解决方案4】:

您可能会发现 cookiecutter 工具对基于灵活模板自动创建骨架项目很有用:

https://github.com/audreyr/cookiecutter

它是跨平台的并积极维护。尽管它是在 python 中实现的,但它适用于任何类型的项目,并且不需要任何 python 专业知识。最重要的是,您可以通过 github 轻松共享您的模板。

【讨论】:

    【解决方案5】:

    一个适合我的简单解决方案:

    • 在一个固定的位置创建一个目录,里面有你需要的东西。
    • 然后制作一个脚本,将其内容复制到您要启动 git 存储库的位置。

    下面是一个例子。

    顺便说一下,一些常见的 .gitignore 配置可以在这里找到:https://gist.github.com/octocat/9257657

    设置目录:

    mkdir ~/.git_template_dir
    cd ~/.git_template_dir
    echo "..." > .gitignore
    

    编写脚本:

    *尼克斯:

    #!/bin/bash
    git init
    cp -R ~/.git_template_dir/ .
    

    Windows(%userprofile% 相当于 ~;%cd% 相当于 .):

    git init
    xcopy %userprofile%\.git_template_dir\ %cd%
    

    然后添加到 Path 以便于访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2011-05-01
      • 2014-05-16
      • 2011-01-30
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多