2017-08-03 4 views
0

J'utilise git avec Source Tree.Git - empêcher un commit particulier d'être poussé

J'ai fait 3-4 changements à certains fichiers dans une copie locale d'une branche. J'aurai toujours besoin de ces changements localement mais je ne veux jamais le pousser accidentellement à distance. Je peux bien sûr garder ces modifications non validées, mais de cette façon, je risque de perdre les modifications en cas de rejet accidentel ou de nettoyage, etc.

Y at-il un moyen de marquer certains fichiers pour ne jamais être poussé.

Alternativement, existe-t-il un meilleur moyen d'atteindre mon objectif.

Certains d'entre eux sont le fichier change & certains de ces nouveaux fichiers que j'ai ajoutés au dépôt local

+0

Vous pouvez ajouter un crochet de pré-push pour cette branche pour vous rappeler que vous ne devez pas pousser de commits là-bas, si cela vous convient? – kuskmen

+0

@kuskmen - Je veux faire d'autres commits dans cette branche. Juste pas ces quelques fichiers. – user93353

+0

Quelques idées intéressantes dans https://stackoverflow.com/questions/6644329/block-a-git-branch-from-being-pushed, même si c'est plus sur les branches. – Chris

Répondre

0

Si vous voulez valider les modifications, je suggère de le faire sur une branche séparée que vous rebasage sur maître après chaque engagez-vous à faire là-bas. Vous travaillerez alors en ayant extrait votre branche locale seulement, puis en cochant master master juste avant de valider, puis en poussant le master, en cochant la branche locale seulement et en faisant un rebase sur le master.

Si vous n'avez pas besoin de valider les modifications: Vous pouvez essayer d'utiliser le fichier .git/info/exclude, qui fonctionne de manière similaire à .gitignore, mais ne fonctionne que localement sur votre machine et n'est pas activé .

De Gitdoc - Ignoring files

Explicit repository excludes 

If you don't want to create a .gitignore file to share with others, you can create rules that are not committed with the repository. You can use this technique for locally-generated files that you don't expect other users to generate, such as files created by your editor. 

Use your favorite text editor to open the file called .git/info/exclude within the root of your Git repository. Any rule you add here will not be checked in, and will only ignore files for your local repository. 

In Terminal, navigate to the location of your Git repository. 
Using your favorite text editor, open the file .git/info/exclude. 
+0

Cela ne m'empêchera pas de commettre localement aussi? Je veux m'engager localement. – user93353

+0

Vous ne pouvez pas activer certaines validations et en exclure d'autres dans git. Puisque chaque commit contient tous les commits précédents, et branch est simplement un pointeur sur un commit. Si vous avez un commit A contenant les fichiers que vous ne voulez pas pousser, alors créez un commit B depuis A, si votre branche est en B, il n'y a aucun moyen de pousser la branche sans inclure A et B – sp1nakr

+0

J'ai ajouté une mise à jour suggestion – sp1nakr

-1

Il y a une réponse relativement facile pour les nouveaux fichiers, mais les fichiers que vous avez modifiés sont en quelque sorte un peu plus difficile.

Pour les nouveaux fichiers, vous devriez simplement pouvoir utiliser un .gitignore. Si vous ne voulez pas ajouter le .gitignore au .gitignore du projet, vous pouvez utiliser git pour ajouter une configuration à vos utilisateurs et ignorer le fichier en question. Disons que vous voulez ignorer tous les fichiers du répertoire foo/. Vous pouvez le faire via:

git config --global --add core.excludesfile $HOME/.gitignore 
echo "/foo" >> $HOME/.gitignore 

Pour les fichiers modifiés, vous devrez probablement créer un nouveau fichier, et modifier vos start-ups pour rechercher ces nouveaux fichiers correctement.

+0

Est-ce que .gitignore ne m'empêchera pas de commettre aussi localement? Je veux m'engager localement. – user93353

+0

'.gitignore' empêche d'ajouter mais pas de pousser. – phd

2

Je suis désolé mais quelqu'un doit vous dire la vérité .. Vous ne pouvez pas faire ce que vous voulez.

Vous ne pouvez tout simplement pas empêcher la validation d'un commit, à moins qu'il ne soit dans une autre branche non poussée. Mais dans ce cas bien sûr, vous n'aurez pas les deux Les fichiers et votre branche dev au même endroit.

La réponse que vous ne voulez pas

Pour les nouveaux fichiers, comme d'autres ont dit, vous pouvez les ignorer.

Pour les fichiers déjà suivis, vous pouvez dire à git d'ignorer les modifications locales avec git update-index --assume-unchanged <file>, mais cela n'empêchera pas git d'abandonner les modifications avec une extraction, par exemple.

Que pouvez-vous faire

Je pense que la seule option est de changer la façon dont votre application charge ces fichiers (je suppose qu'ils sont quelque chose comme les fichiers de configuration).

Par exemple, avez un dossier local configurable où d'autres fichiers de propriétés peuvent être trouvés. Ce dossier serait hors du référentiel, et peut-être dans un autre référentiel ou sauvegardé avec d'autres services