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

在git init上设置默认目录结构,git,templates,Git,Templates,我想通过在git init命令上自动创建.gitignore、README、LICENSE和其他文件来优化我的git工作流 要做到这一点,我在RTFM中输入了git init,它告诉我执行以下操作之一: 使用gitinit--template=,但这很麻烦 更改$GIT\u TEMPLATE\u DIR环境变量的内容,但我不希望这样 设置init.templatedir配置变量。现在我们在谈 所以我sudo mkdir/usr/share/git core/templates/my_templa

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

要做到这一点,我在RTFM中输入了
git init
,它告诉我执行以下操作之一:

  • 使用
    gitinit--template=
    ,但这很麻烦
  • 更改$GIT\u TEMPLATE\u DIR环境变量的内容,但我不希望这样
  • 设置
    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/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回购吗?是裸回购吗?

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

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

    mkdir ~/.git_template_dir
    cd ~/.git_template_dir
    echo "..." > .gitignore
    
    模板目录

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

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


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

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

    $ git clone project_template new_project
    $ cd new_project
    $ rm -rf .git
    $ git init
    
    不是理想的解决方案,但可以编写脚本


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

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

  • 创建默认目录结构,就像它是一个普通的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
    
    (注意有趣的消息:
    重新初始化现有Git存储库…

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

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

  • 将来,假设您已经设置了默认模板,您只需

    git init && git reset --hard
    

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

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


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

    一个简单的解决方案,适用于我:

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

    顺便说一下,这里提供了一些常见的.gitignore配置:

    设置目录:

    mkdir ~/.git_template_dir
    cd ~/.git_template_dir
    echo "..." > .gitignore
    
    编写脚本:

    *尼克斯:

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


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

    现在没有时间写完整的答案,但是所有模板文件都进入
    .git
    文件夹您完全正确!确实,这些文件位于.git目录中。您可以创建一个包含这些起始文件的repo,然后使用
    .git
    目录作为模板目录吗链接可能会回答问题,最好包含答案的基本部分并提供链接供参考。如果链接页面发生更改,只有链接的答案可能会无效。感谢反馈,我已经重写了答案,以便在帖子中直接提供信息。
    cp-r…
    的目的是什么?您可以>git clone project\u template new\u project取而代之。由于@bummi避免,您插入的链接已断开!:(在GitHub帮助中,当它来自定向时,不是直接克隆该repo,而是通过使用此可用的模板按钮复制它。这样就不需要删除
    .git
    目录或运行
    git init
    ,如果您对这里实际发生的管道有更详细的解释感兴趣,我很高兴。)py来解释,但本质上它归结为这样一个事实:git对象(和包)实际上是您的文件(以及提交和目录结构)如果你将它们正确地存储在模板中,那么你可以在任何模板初始化的repo中恢复它们。当然,这也可以通过较低级别的命令来完成,但这样更容易避免错误。
    #!/bin/bash
    git init
    cp -R ~/.git_template_dir/ .
    
    git init
    xcopy %userprofile%\.git_template_dir\ %cd%