35

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

为此,我git inithttp://git-scm.com/docs/git-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 吗?一个光秃秃的?

4

5 回答 5

27

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

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

模板目录

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

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

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

于 2013-05-03T16:31:24.963 回答
9

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

  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

(我没有直接的参考资料,但本章肯定会有所帮助。)

于 2015-02-04T09:44:30.447 回答
6

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

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

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

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

于 2014-05-07T06:52:50.623 回答
3

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

https://github.com/audreyr/cookiecutter

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

于 2015-05-05T15:15:24.297 回答
2

一个对我有用的简单解决方案:

  • 在固定位置创建一个目录,其中包含您需要的内容。
  • 然后制作一个脚本,将其内容复制到您要启动 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 以便于访问。

于 2016-07-27T02:00:14.890 回答