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

xvw2m8pv  于 2023-06-28  发布在  Git
关注(0)|答案(6)|浏览(107)

我想优化我的git工作流程,通过git init命令自动创建.gitignore,README,LICENSE和其他文件。
要做到这一点,我RTFM的git inithttp://git-scm.com/docs/git-init,它告诉我做以下之一:
1.使用git init --template=<template_directory>,但这很麻烦。
1.修改$GIT_TEMPLATE_DIR环境变量的内容,但我不想这样做。
1.设置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
...
我对自己很满意,我去我的发展Playground目录,然后:

$ 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上)?template应该是git repo吗?一个光秃秃的?

ou6hu8tu

ou6hu8tu1#

您看到的行为是预期的git行为:
如果您正确阅读了有关模板目录的手册:

模板目录

模板目录包含创建后将复制到**$GIT_DIR**的文件和目录。
从模板目录复制的文件被放置在GIT_DIR中,默认情况下,该目录位于repo根目录下的.git目录中。
据我所知,git init不支持工作树模板。如果需要这种行为,您应该能够通过编写一些简单的bash别名或函数来完成此操作。

jucafojl

jucafojl2#

你可以做到这一点,但它需要一些额外的步骤。
1.创建默认目录结构,就像它是一个普通的存储库一样:

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

1.您现在可以将其设置为默认模板,但为了举例:

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

(Note有趣的消息:Reinitialized existing Git repository...
1.现在重要的一步:(你的repo是最新的,但你的工作树不是):

git reset --hard

(if如果你之前跳过了提交,你必须在重置之前在这里提交)
将来,假设您已经设置了默认模板,您只需

git init && git reset --hard

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

ogsagwnx

ogsagwnx3#

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

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

不是一个理想的解决方案,但它可以被脚本化。
这是对here提供的步骤的修改,这是特定于使用GitHub的。

0sgqnhkj

0sgqnhkj4#

您可能会发现cookiecutter工具对于基于灵活模板自动初始创建 backbone 项目非常有用:
https://github.com/audreyr/cookiecutter
它是跨平台的,并积极维护。虽然它是用Python实现的,但它适用于任何类型的项目,并且不需要任何Python专业知识。最重要的是,你可以通过github轻松分享你的模板。

cvxl0en2

cvxl0en25#

一个简单的解决方案,为我工作:

  • 在一个固定的位置建立一个目录,里面有你需要的东西。
  • 然后创建一个脚本,将其内容复制到您想要启动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%到.):

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

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

u4dcyp6a

u4dcyp6a6#

您需要:

mkdir -p /usr/local/share/git-templates/hooks
git config --system init.templatedir '/usr/local/share/git-templates'
  • hooks目录中添加所需的钩子

然后才在要更新的存储库的根目录下发出git init

相关问题