web-dev-qa-db-fra.com

git: avoir un fichier .gitignore différent pour chaque télécommande

J'ai un dépôt à distance dans lequel je veux valider certains fichiers (les fichiers compilés pour les déployer sur une plateforme de cloud computing), mais je ne veux pas les déployer sur github ...

existe-t-il un moyen d'avoir différents fichiers .gitignore, un pour chaque télécommande?

69
opensas

Cela n'a pas vraiment de sens dans le modèle de git. Les validations contiennent des ensembles de fichiers; tous les fichiers .gitignore font dire à l'interface utilisateur de ne pas ajouter automatiquement les fichiers correspondant à certains modèles. Ce que cela signifierait effectivement, c'est d'avoir des ensembles de validations parallèles presque identiques, mais ne contenant qu'un sous-ensemble des fichiers.

Il serait possible de le faire avec un schéma de branchement, où vous avez une branche "déploiement" qui se sépare du maître et est la même mais contient les fichiers compilés supplémentaires. Cela pourrait même être automatisé avec des hooks git pour compiler automatiquement les fichiers et les ajouter au dépôt. J'imagine une structure comme celle-ci:

master:       A ---> B ---> C ---> D
               \      \      \      \
                \      \      \      \
deployment:      -> A'  -> B'  -> C'  -> D'

c'est-à-dire que chaque fois qu'un certain serveur obtient un nouveau commit sur master, il construit le projet, ajoute les fichiers construits à un nouveau commit à partir de D, et le valide dans la branche de déploiement - qui n'a alors pas besoin d'être poussé vers github.

37
Dougal

Je trouve un moyen de le faire.

Dans mon cas, j'avais besoin de synchroniser le projet avec heroku et github (en tant que dépôt public).

Mais certains fichiers contenant des informations privées n'étaient pas intéressants à partager dans un référentiel public

Habituellement, un projet simple aurait la structure de dossiers suivante

Project folder (remote heroku)
    - .git
    - .gitignore
    - (folders and files)

Ce que j'ai fait, c'est ajouter un niveau de plus, et y créer un autre référentiel git, avec un gitignore qui omettrait certains fichiers de mon projet.

Project public (remote github)
    - .git
    - .gitignore
    - Project folder (remote heroku)
        - .git
        - .gitignore
        - (folders and files)

Ce n'est donc pas un référentiel git avec deux référentiels distants avec des gitignores différents.

Il existe deux référentiels différents.

Au plus profond, j'exclus uniquement les fichiers générés par le IDE et certains fichiers générés au moment de l'exécution).

Au niveau le plus externe, j'exclus tous les fichiers qui ne peuvent pas être rendus publics.

6
Guilherme

Un solution automatisée aux méthodes mentionnées ici:

  1. Configurez le .git racine pour ignorer le ou les sous-dossiers que vous souhaitez transmettre différemment
  2. Initier un nouveau git dans le ou les sous-dossiers et attribuer la configuration à distance
  3. Modifiez le fichier .git/hooks/pre-Push du dossier racine pour exécuter git Push dans ces sous-dossiers en fonction des arguments entrants.
1

Une autre option est sous-modules git .

Cela peut être utile si, par exemple, vous voulez que votre code et votre documentation se trouvent dans deux référentiels différents avec un contrôle d'accès indépendant, etc. master "(pas un sous-module git) repo contenant les deux (pour le téléchargement pypi, peut-être). C'est une façon décente d'organiser un projet de manuel CS. Les deux projets peuvent avancer gaiement de manière indépendante et se synchroniser sur les versions majeures, pilotés par le responsable du référentiel maître.

1
hobs