Подтвердить что ты не робот

Настройте структуру каталогов по умолчанию на git init

Я хотел бы оптимизировать рабочий процесс git, автоматизируя создание .gitignore, README, LICENSE и других файлов в команде git init.

Для этого я RTFM git init на http://git-scm.com/docs/git-init, и он говорит мне сделать одно из следующего:

  • Используйте git init --template=<template_directory>, но это надоедает.
  • Измените содержимое переменной среды $GIT_TEMPLATE_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/доли/ git -core/шаблоны/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? Голый?

4b9b3361

Ответ 1

Поведение, которое вы видите, - это ожидаемое поведение git:

Если вы правильно прочитали руководство относительно каталога шаблонов:

СПИСОК ШАБЛОНОВ

Каталог шаблонов содержит файлы и каталоги, которые будут скопированы в $GIT_DIR после его создания.

Файлы, скопированные из каталога шаблонов, помещаются в ваш GIT_DIR, который по умолчанию относится к каталогу .git в корневом каталоге вашего репо.

git init не поддерживает шаблоны для дерева работ, насколько я знаю. Если это необходимо, вы должны уйти от написания простых псевдонимов bash или функций, которые вы можете сделать для вас.

Ответ 2

Вы можете сделать это, но для этого потребуется несколько дополнительных шагов.

  • Создайте структуру каталогов по умолчанию, как если бы это было обычное репо:

    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. Теперь важный шаг: (ваше репо обновлено, но ваше рабочее дерево не является):

    git reset --hard
    

    (если вы пропустите фиксацию раньше, вам нужно будет зафиксировать здесь перед сбросом)

В будущем, если вы задали свой шаблон по умолчанию, вы просто

git init && git reset --hard

(У меня нет прямых ссылок, но эта глава помогает.)

Ответ 3

Вы можете создать репозиторий шаблонов, который вы клонируете каждый раз, когда хотите создать новый проект. Затем вы удаляете папку .git и копируете содержимое в новый проект, прежде чем вызывать git init. Предполагая, что ваш репозиторий шаблонов называется project_template:

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

Не идеальное решение, но оно может быть написано сценарием.

Это модификация шагов здесь, которая специфична для использования GitHub.

Ответ 4

Вы можете найти инструмент cookiecutter, полезный для автоматизации первоначального создания проекта скелета на основе гибкого шаблона:

https://github.com/audreyr/cookiecutter

Это кросс-платформа и активно поддерживается. Хотя он реализован в python, он хорошо работает для любого типа проекта и не требует опыта python. Лучше всего, вы можете легко поделиться своими шаблонами через github.

Ответ 5

Простое решение, которое работает для меня:

  • Создайте каталог в определенном месте с тем, что вам нужно внутри.
  • Затем создайте script, который скопирует его содержимое туда, где вы хотите запустить репозиторий git.

Далее следует пример.

Кстати, некоторые общие конфигурации .gitignore доступны здесь: https://gist.github.com/octocat/9257657

Настройте каталог:

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

Напишите script:

* Никс:

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

Windows (% userprofile%, эквивалентный ~;% cd% to.):

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

Затем добавьте в Path для легкого доступа.