36 votes

Mise en place d'une structure de répertoire par défaut sur git init

J'aimerais optimiser mon flux de travail git en automatisant la création de fichiers .gitignore, README, LICENSE et autres sur git init commandement.

Pour cela, j'ai fait un RTFM de git init en http://git-scm.com/docs/git-init et il me dit de faire l'une des choses suivantes :

  1. Utilice git init --template=<template_directory> mais c'est gênant.
  2. Modifier le contenu de la variable d'environnement $GIT_TEMPLATE_DIR, mais je ne préfère pas.
  3. Définissez le init.templatedir variable de configuration. Maintenant nous parlons !

Alors je sudo mkdir /usr/share/git-core/templates/my_template y touch quelques fichiers, puis je vim ~/.gitconfig et ajouter :

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

Et git config -l me dit :

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

Heureux de moi, je vais dans le répertoire de mon terrain de jeu de développement et :

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

Dommage... où sont les fichiers ? :(

Vérification rapide :

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

Il semble que $ git init --template=/usr/share/git-core/templates/my_template ne fonctionne pas non plus.

Alors qu'est-ce que je fais de mal ici ? Une directive de configuration incorrecte ? Mauvais modèle ou son emplacement (je suis sous OSX) ? Le modèle doit-il être un repo git ? Un repo nu ?

27voto

Tuxdude Points 8652

Le comportement que vous voyez est le comportement attendu git comportement :

Si vous avez bien lu le manuel concernant le répertoire des modèles :

RÉPERTOIRE DES MODÈLES

Le répertoire de modèles contient des fichiers et répertoires qui seront copiés dans le $GIT_DIR après sa création.

Les fichiers copiés à partir du répertoire des modèles sont placés dans le répertoire de l'utilisateur. GIT_DIR qui, par défaut, est le .git sous le répertoire racine de votre repo.

git init ne prend pas en charge les modèles pour l'arbre de travail, pour autant que je sache. Si ce comportement est requis, vous devriez pouvoir vous en sortir en écrivant des alias ou des fonctions bash simples pour le faire à votre place.

9voto

DylanYoung Points 1828

Vous pouvez le faire, mais cela nécessitera quelques étapes supplémentaires.

  1. Créez votre structure de répertoire par défaut comme s'il s'agissait d'un repo normal :

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

(strictement parlant, ce dernier commit n'est pas nécessaire ici, mais vous devez les faire un jour, alors pourquoi pas maintenant)

  1. Maintenant, supprimez votre arbre de travail et déplacez les fichiers .git vers le haut :

    mv .git/* ./ && rm -r README.md .gitignore .git
  2. Vous pouvez maintenant le définir comme votre modèle par défaut, mais à titre d'exemple :

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

    (Notez le message intéressant : Reinitialized existing Git repository... )

  3. Maintenant, l'étape importante : (votre repo est à jour, mais votre arbre de travail ne l'est pas) :

    git reset --hard

    (si vous avez sauté le commit plus tôt, vous devrez commiter ici avant de réinitialiser)

A l'avenir, en supposant que vous ayez défini votre modèle par défaut, il vous suffira de

git init && git reset --hard

(Je n'ai pas de références directes, mais ce chapitre aide certainement.)

6voto

Nichaladas Points 91

Vous pouvez créer un dépôt de modèles que vous clonez chaque fois que vous voulez créer un nouveau projet. Vous supprimez ensuite le dossier .git et copiez son contenu dans votre nouveau projet avant d'appeler git init. En supposant que votre dépôt de modèles s'appelle projet_modèle :

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

Ce n'est pas une solution idéale, mais elle peut être scénarisée.

Il s'agit d'une modification des étapes fournies aquí qui est spécifique à l'utilisation de GitHub.

3voto

David Kirkby Points 182

Vous trouverez peut-être l'outil cookiecutter utile pour automatiser la création initiale d'un projet squelette basé sur un modèle flexible :

https://github.com/audreyr/cookiecutter

Il est multiplateforme et fait l'objet d'une maintenance active. Bien qu'il soit implémenté en python, il fonctionne bien pour tout type de projet et ne nécessite aucune expertise en python. Mieux encore, vous pouvez facilement partager vos modèles via github.

2voto

Pat-Laugh Points 395

Une solution simple qui fonctionne pour moi :

  • Faites un répertoire à un endroit fixe avec ce dont vous avez besoin à l'intérieur.
  • Faites ensuite un script qui copie son contenu à l'endroit où vous voulez initier un dépôt git.

Voici un exemple.

Au fait, certaines configurations courantes de .gitignore sont disponibles ici : https://gist.github.com/octocat/9257657

Configurez le répertoire :

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

Ecrivez le script :

*nix :

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

Windows (%userprofile% équivalent à ~ ; %cd% à .) :

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

Puis, ajoutez-les au Chemin pour un accès facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X