Comment voir ce qui sera mis à jour à partir du référentiel avant d'émettre la commande «svn update»?

115

J'ai commis des modifications dans de nombreux fichiers dans un référentiel SVN d'Eclipse.

Je vais ensuite au répertoire du site Web sur la boîte Linux où je veux mettre à jour ces modifications du référentiel vers le répertoire là-bas.

Je veux dire "svn update project100" qui mettra à jour les répertoires sous "project100" avec tous mes fichiers ajoutés et modifiés, etc.

CEPENDANT, je ne veux pas nécessairement mettre à jour les changements que je n'ai pas faits. Donc j'ai pensé que je pourrais dire "svn status project100" mais quand je fais cela, j'obtiens une liste totalement différente des changements qui seront faits, aucun des miens n'est dans la liste, ce qui est étrange.

Par conséquent, pour être sûr que seules mes modifications sont mises à jour dans le répertoire Web, je suis obligé de naviguer vers tous les répertoires où je sais qu'il y a un changement que j'ai fait et de mettre à jour explicitement uniquement ces fichiers, par exemple "svn update newfile1.php" etc. ce qui est fastidieux.

Quelqu'un peut-il nous éclairer sur la procédure de travail standard ici, à savoir comment obtenir une liste précise de toutes les modifications qui sont sur le point d'être apportées avant d'exécuter la commande "svn update"? Je pensais que c'était la commande "status".

Edward Tanguay
la source

Réponses:

167

Essayer:

svn status --show-updates

ou (le même mais plus court):

svn status -u
Dave Webb
la source
9
ou plus court: svn st -u
Kenyakorn Ketsombut
Que signifient les X dans la sortie?
IgorGanapolsky
1
De plus, utilisez: svn status -q -u... Affiche uniquement les modifications de mise à jour et les modifications locales qui concernent les fichiers appartenant au référentiel. Vous n'obtenez pas de points d'interrogation (?) Des fichiers non référentiels.
sera
56

En fonction de ce que vous voulez savoir entre votre copie de travail et le dernier référentiel du serveur svn, sans mettre à jour votre copie de travail locale, voici ce que vous pouvez faire:

si vous voulez savoir ce qui a été changé dans le référentiel du serveur svn, exécutez la commande:

$ svn st -u

si vous voulez savoir si le même fichier a été modifié à la fois dans votre copie de travail locale et dans le référentiel du serveur svn, exécutez la commande:

$ svn st -u | grep -E '^M {7}\*'

si vous voulez obtenir la liste des fichiers modifiés entre une révision particulière et HEAD, exécutez la commande:

$ svn diff -r revisionNumber:HEAD --summarize

si vous souhaitez obtenir une liste des fichiers modifiés entre les révisions spécifiques, exécutez la commande:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

si vous voulez voir ce qui sera mis à jour (sans réellement mettre à jour), exécutez la commande:

$ svn merge --dry-run -r BASE:HEAD .

si vous voulez savoir quel contenu d'un fichier particulier a été modifié dans le référentiel du serveur svn par rapport à votre copie de travail, exécutez la commande:

$ svn diff -r BASE:HEAD ./pathToYour/file

si vous voulez savoir quel contenu de tous les fichiers a été modifié dans le référentiel du serveur svn par rapport à votre copie de travail, exécutez la commande:

$ svn diff -r BASE:HEAD .
TianCaiBenBen
la source
43

Vous pouvez voir ce qui sera mis à jour (sans réellement mettre à jour) en émettant:

svn merge --dry-run -r BASE:HEAD .

Plus de détails ici .

Ben Hoffstein
la source
Ci-dessus n'a pas fonctionné pour moi, a dû courirsvn merge --dry-run --revision BASE:HEAD .
Znarkus
3
Obtenir "svn: E195020: Impossible de fusionner dans la copie de travail de révision mixte [16032: 16061]; essayez d'abord de mettre à jour"
Hubert Grzeskowiak
Excellente réponse - dommage que cela ne fonctionne pas sur les copies de travail de révision mixte. Cela m'apprendra
Gerard ONeill
2
@HubertGrzeskowiak - J'adore l'ironie q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Jesse Chisholm
17

C'est ce que je cherchais. J'ai d'abord vérifié Google, mais svn helpj'ai fini par venir pour moi :)

svn diff -r BASE:HEAD .
Jeff
la source
14

Le même mais plus court plus court :):

svn st -u
Kenzo
la source
0

Vous pouvez utiliser 'svn diff' pour voir la différence entre votre copie de travail et le référentiel.

Andrew
la source
9
Faux. Ceux-ci ne listeraient que les différences entre vous et la dernière fois que vous vous êtes synchronisé avec le référentiel. Vous ne verrez aucune différence que d'autres personnes ont commise dans le référentiel entre-temps. Le PO veut savoir quels sont ces changements, sans les appliquer via ansvn update
dland
@Andrew voulait suggérer que l'OP exécute 'svn diff -r HEAD URL' pour voir la différence entre les fichiers extraits et ce qui est archivé en tant que HEAD ou version supérieure du référentiel.
Mac
0

En théorie, vous pouvez effectuer toutes vos modifications dans une branche que vous avez créée pour votre propre usage. Vous seriez alors raisonnablement sûr d'être le seul à vous y engager.

Le développement des fonctionnalités IMHO devrait être fait comme ça.

Ensuite, vous pouvez mettre à jour cette machine cible à partir de cette branche plutôt qu'à partir du tronc.

Rory Becker
la source