在git init上设置默认目录结构

时间:2013-05-03 16:21:44

标签: git templates

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

要做到这一点,我git init的{​​{1}} RTFM并告诉我要执行以下操作之一:

  1. 使用git init --template=<template_directory>,但这很麻烦。
  2. 更改$ GIT_TEMPLATE_DIR环境变量的内容,但我不愿意。
  3. 设置init.templatedir配置变量。现在我们正在谈论!
  4. 所以我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 /共享/ git的核/模板/ my_template
      ...

    对自己感到高兴,我去了我的开发游乐场目录并且:

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

    Bummer ......文件在哪里? :(

    快速检查:

    $ 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吗?一个裸的?

5 个答案:

答案 0 :(得分:20)

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

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

  

模板目录

     

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

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

据我所知,

git init不支持工作树的模板。如果需要这种行为,你应该能够编写一些简单的bash别名或函数来为你做这件事。

答案 1 :(得分:5)

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

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

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

这是对here提供的步骤的修改,这些步骤特定于使用GitHub。

答案 2 :(得分:5)

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

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

    mkdir template && cd template
    git init && touch README.md && cat ~/.gitignore_global > .gitignore
    git add --all && git commit -m "init"
    
  2. (严格来说,这最后一次提交在这里是不必要的,但你最终必须这样做,所以为什么不这样做呢)

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

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

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

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

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

      git reset --hard
      

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

    4. 将来,假设您已设置默认模板,只需

      即可
      git init && git reset --hard
      

      (我没有直接引用,但this chapter肯定有帮助。)

答案 3 :(得分:2)

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

https://github.com/audreyr/cookiecutter

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

答案 4 :(得分:0)

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

  • 使用您需要的内容在固定位置创建目录。
  • 然后创建一个脚本,将其内容复制到您要启动git存储库的位置。

以下是一个例子。

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

设置目录:

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

编写脚本:

* nix中:

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

Windows(%userprofile%相当于〜;%cd%to。):

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

然后添加到路径以便于访问。