我想通过在git init
命令上自动创建.gitignore,README,LICENSE和其他文件来优化我的git工作流。
要做到这一点,我git init
的{{1}} RTFM并告诉我要执行以下操作之一:
git init --template=<template_directory>
,但这很麻烦。init.templatedir
配置变量。现在我们正在谈论!所以我sudo mkdir /usr/share/git-core/templates/my_template
和touch
中有一些文件,然后我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吗?一个裸的?
答案 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)
你可以做到,但需要一些额外的步骤。
创建默认目录结构,就好像它是一个普通的repo:
mkdir template && cd template
git init && touch README.md && cat ~/.gitignore_global > .gitignore
git add --all && git commit -m "init"
(严格来说,这最后一次提交在这里是不必要的,但你最终必须这样做,所以为什么不这样做呢)
现在删除您的工作树并向上移动.git文件:
mv .git/* ./ && rm -r README.md .gitignore .git
您现在可以将其设置为默认模板,但为了示例:
mkdir ../myrepo && cd ../myrepo
git init --template=../template
(请注意有趣的信息:Reinitialized existing Git repository...
)
现在重要的一步:(您的回购是最新的,但您的工作树不是):
git reset --hard
(如果您之前跳过提交,则必须在重置前提交)
将来,假设您已设置默认模板,只需
即可git init && git reset --hard
(我没有直接引用,但this chapter肯定有帮助。)
答案 3 :(得分:2)
您可能会发现cookiecutter工具对于基于灵活模板自动初始创建骨架项目非常有用:
https://github.com/audreyr/cookiecutter
它是跨平台的并且积极维护。虽然它是在python中实现的,但它适用于任何类型的项目,并且不需要任何python专业知识。最重要的是,您可以通过github轻松共享模板。
答案 4 :(得分:0)
一个适合我的简单解决方案:
以下是一个例子。
顺便说一下,这里有一些常见的.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%
然后添加到路径以便于访问。