Konfigurowanie domyślnej struktury katalogów w git init

Chciałbym zoptymalizować mój przepływ pracy git poprzez automatyzację tworzenia .gitignore, README, LICENSE i inne pliki w Komendzie git init.

Aby to zrobić i RTFM z git init w http://git-scm.com/docs/git-init i mówi mi, żebym zrobił jedną z następujących rzeczy:

  1. Użyj git init --template=<template_directory>, ale to uciążliwe.
  2. zmienić zawartość zmiennej środowiskowej $GIT_TEMPLATE_DIR, ale wolałbym nie.
  3. Ustaw zmienną konfiguracyjną init.templatedir. Teraz rozmawiamy!

Więc ja sudo mkdir /usr/share/git-core/templates/my_template i touch kilka plików w nim, potem ja vim ~/.gitconfig i dołączam:

[init]
    templatedir = /usr/share/git-core/templates/my_template

I git config -l mówi mi:

...
init.templatedir= / usr/share/git-core/templates / my_template
...

Zadowolony z siebie, idę do mojego katalogu deweloperskiego i:

$ git init
Initialized empty Git repository in /the/current/directory
$ ls -a
.   ..  .git

Pech... gdzie są akta? :(

Szybkie sprawdzenie:

$ ls -a /usr/share/git-core/templates/my_template
.   ..  .gitignore  LICENSE README.md
$ git --version
git version 1.8.2.1

Wydaje się, że {[11] }nie działa ani jedno, ani drugie.

Więc co to jest, że robię źle tutaj? Błędna dyrektywa konfiguracyjna? Zły szablon lub jego lokalizacja(jestem na OSX)? Czy szablon powinien być repo git? Gołą?

Author: Oleg, 2013-05-03

5 answers

Zachowanie, które widzisz jest oczekiwane git zachowanie:

Jeśli poprawnie przeczytałeś instrukcję o katalogu szablonu:

TEMPLATE DIRECTORY

Katalog szablonów zawiera pliki i katalogi, które zostaną skopiowane do $GIT_DIR po jego utworzeniu.

Pliki skopiowane z katalogu template są umieszczane w katalogu GIT_DIR, który domyślnie jest katalogiem .git w katalogu głównym repo katalog.

git init nie obsługuje szablonów dla drzewa pracy, o ile wiem. Jeśli takie zachowanie jest wymagane, powinieneś być w stanie uciec od pisania prostych aliasów lub funkcji bash, aby to zrobić za Ciebie.

 26
Author: Tuxdude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-03 16:31:24

Możesz to zrobić, ale będzie to wymagało kilku dodatkowych kroków.

  1. Utwórz domyślną strukturę katalogów tak, jakby była to normalna repo:

    mkdir template && cd template
    git init && touch README.md && cat ~/.gitignore_global > .gitignore
    git add --all && git commit -m "init"
    

(ściśle mówiąc ten ostatni commit nie jest tutaj konieczny, ale musisz go w końcu wykonać, więc dlaczego nie teraz)

  1. Teraz Usuń działające drzewo i ruszaj się .pliki git up:

    mv .git/* ./ && rm -r README.md .gitignore .git
    
  2. Możesz teraz ustawić to jako domyślny szablon, ale ze względu na przykład:

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

    (zwróć uwagę na interesującą wiadomość: Reinitialized existing Git repository... )

  3. Teraz ważny krok: (Twój repo jest aktualny, ale twoje drzewo robocze nie jest):

    git reset --hard
    

    (jeśli pominiesz commit wcześniej, będziesz musiał zatwierdzić tutaj przed zresetowaniem)

W przyszłości, zakładając, że ustawiłeś domyślny szablon, po prostu

git init && git reset --hard

(nie mam bezpośrednich odniesień, ale ten rozdział na pewno pomaga.)

 9
Author: DylanYoung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-04 09:57:25

Możesz utworzyć repozytorium szablonów, które klonujesz za każdym razem, gdy chcesz utworzyć nowy projekt. Następnie usuń .git folder i skopiuj zawartość do nowego projektu przed wywołaniem git init. Zakładając, że repozytorium szablonów nazywa się project_template:

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

Nie jest to idealne rozwiązanie, ale można je skryptować.

Jest to modyfikacja kroków dostarczonych tutaj, która jest specyficzna dla korzystania z GitHub.

 6
Author: Nichaladas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-15 23:56:26

Narzędzie cookiecutter może być przydatne do automatyzacji wstępnego tworzenia szkieletu projektu opartego na elastycznym szablonie:

Https://github.com/audreyr/cookiecutter

Jest wieloplatformowy i aktywnie utrzymywany. Chociaż jest zaimplementowany w Pythonie, działa dobrze dla każdego rodzaju projektu i nie wymaga żadnej wiedzy w Pythonie. Co najlepsze, możesz łatwo udostępniać swoje szablony za pośrednictwem github.

 3
Author: David Kirkby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 15:15:24

Proste rozwiązanie, które działa dla mnie:

  • Utwórz katalog w stałej lokalizacji z tym, czego potrzebujesz w środku.
  • następnie stwórz skrypt, który skopiuje jego zawartość do miejsca, w którym chcesz zainicjować repozytorium git.

Oto przykład.

Przy okazji, niektóre pospolite .konfiguracje gitignore są dostępne tutaj: https://gist.github.com/octocat/9257657

Ustaw katalog:

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

Napisz skrypt:

* nix:

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

Windows (%userprofile % odpowiednik~;% cd % to .) :

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

Następnie dodaj do ścieżki dla łatwego dostępu.

 2
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-27 02:08:30