web-dev-qa-db-fra.com

git - Est-il possible d'exclure un fichier de `git Push`, mais de le conserver dans le référentiel local?

Dans mon répertoire personnel, j'ai des fichiers dans un référentiel git local, car je veux les suivre tous sous contrôle de version.

La plupart de ces fichiers que je souhaite envoyer vers un référentiel distant, mais quelques-uns souhaitent conserver dans mon référentiel local uniquement (ils contiennent des informations légèrement sensibles). 

Comment puis-je réaliser cela avec git? Puis-je configurer un fichier ".gitignore-for-Push"? Je ne peux pas utiliser le fichier .gitignore local, car il exclurait complètement le suivi de ces fichiers. 

ps: Je suis au courant de la question Y a-t-il un équivalent-fichier d'exclusion ... , mais la réponse descend le chemin .gitignore que je ne peux pas utiliser. L'autre question Exclure des fichiers spécifiques lorsque vous appuyez sur ... ne répond qu'à un cas spécifique pour git + heroku, pas seulement.

29
halloleo

Ce n'est pas possible. Si vous avez validé un fichier, il sera poussé. L'action Push agit uniquement sur les commits, pas sur un fichier. 

Mais vous pouvez utiliser un sous-module pour vos données sensibles et conserver ce sous-module sur votre machine locale pendant que vous transférez le référentiel git normal vers la machine distante.

13
dunni

Vous pouvez continuer et suivre réellement ces fichiers (sans les informations sensibles), mais utilisez ensuite:

git update-index --assume-unchanged <file>

sur chaque fichier. Ensuite, vous pouvez continuer et ajouter les informations sensibles à chaque fichier, mais Git ne verra pas le fichier modifié et ne tentera pas de valider (et donc de pousser) ces informations sensibles.

Pour que Git mette à jour les informations, vous devez utiliser:

git update-index --no-assume-unchanged <file>

29
redhotvengeance

La façon dont j'ai finalement résolu le problème est la suivante: Placez les informations sensibles dans un sous-répertoire avec son propre référentiel git et reliez le (s) fichier (s) à l'ancien emplacement par un lien symbolique. 

Par exemple. dans votre dossier de départ (~) habite le fichier .creds que vous avez pas voulez dans le référentiel public. Déplacez ce fichier dans un sous-dossier appelé, par exemple, protected et créez un lien symbolique de ~ à protected/.creds.. Bien sûr, n'incluez pas ce dossier dans votre référentiel ~, mais créez un référentielnouveau dans le dossier protected uniquement .creds. Si vous n'appuyez pas du tout publiquement ce référentiel, vous êtes prêt.

Je sais que cette solution est une sorte de flic: Mes questions indiquent que le fichier réside dans le même répertoire, mais que la création de liens symboliques fonctionne pour moi.

5
halloleo

Ici git-update-index - Enregistrez le contenu du fichier dans l’arbre de travail dans l’index.

git update-index --assume-unchanged <PATH_OF_THE_FILE>

Exemple:-

git update-index --assume-unchanged somelocation/pom.xml

pour plus de détails.

3
Sireesh Yarlagadda

Il suffit de ne pas valider les fichiers à exclure.

Par exemple, si vous avez deux fichiers a et b qui se trouvent dans le référentiel local, mais que vous souhaitez uniquement en valider un, utilisez: git add a pour ajouter l'un des fichiers. Puis validez avec git commit (n'incluez pas l'indicateur -a)

0
zjagannatha