web-dev-qa-db-fra.com

comment supprimer une liste de modifications existante de SVN

J'ai créé une liste de modifications en faisant ...

$ svn changelist my_changes

... y a ajouté des fichiers, puis a validé la liste des modifications ...

$ svn ci --changelist my_changes --keep-changelists

... alors maintenant, j'ai "conservé" ma liste de modifications et elle apparaît à chaque fois que je visualise le statut.

$ svn status
... modified/added/deleted files listed here...

--- Changelist 'my_changes':
... files that are a part of this changelist listed here...

J'ai "gardé" la liste des modifications pour une raison, mais je n'en ai plus besoin donc je suis prêt à la supprimer. Comment supprimer cette liste de modifications de SVN? Je sais comment supprimer des fichiers de la liste des modifications, mais pas la liste des modifications elle-même.

36
Hristo

Supprimez tous les fichiers associés d'une liste de modifications et il disparaîtra.

Voie officielle

Voir https://stackoverflow.com/a/15992735/253468

svn changelist --remove --recursive --cl my_changes .

Manière manuelle

c'est-à-dire svn changelist --remove file.name

D:\Programming>mkdir test
D:\Programming>cd test
D:\Programming\test>svnadmin create .
D:\Programming\test>svn co file:///D:\Programming\test co
Checked out revision 0.
D:\Programming\test>cd co
D:\Programming\test\co>echo "hello" > test.file
D:\Programming\test\co>svn add test.file
A       test.file

D:\Programming\test\co>svn status
A       test.file

D:\Programming\test\co>svn changelist mycl test.file
A [mycl] test.file

D:\Programming\test\co>svn status
--- Changelist 'mycl':
A       test.file

D:\Programming\test\co>svn changelist --remove test.file
D [mycl] test.file

D:\Programming\test\co>svn status
A       test.file

Automatisation dans Bash

# Remove all files from a specific CL
# Usage: svn_remove_cl my_changes
function svn_remove_cl() {
    svn status |\
    sed -n "/--- Changelist '$1':/,/--- Changelist.*/p" |\
    grep -v '^--- Changelist' |\
    awk '{print $2}' |\
    xargs svn changelist --remove
}

Explication:

  • svn status: Sortie de tous les fichiers modifiés
  • sed: recherchez la liste des modifications et prenez la sortie après le titre CL jusqu'à la prochaine CL ou la fin de la sortie de svn status
  • grep: supprime les titres CL du tampon
  • awk: supprime les statuts des fichiers, ne conserve que les noms de fichiers (c'est-à-dire la deuxième colonne)
  • xargs: mettez chaque ligne en argument dans svn changelist
    (peut nécessiter des ajustements si vous avez des espaces ou des caractères spéciaux dans les noms de fichiers)

Exemple d'exécution

~/tmp/wc$ svn status
A       d

--- Changelist 'cl_a':
A       a
A       e
A       f

--- Changelist 'cl_x':
A       b
A       c
~/tmp/wc$ svn_remove_cl cl_x
Path 'b' is no longer a member of a changelist.
Path 'c' is no longer a member of a changelist.
~/tmp/wc$ svn status
A       b
A       c
A       d

--- Changelist 'cl_a':
A       a
A       e
A       f
49
TWiStErRob

Si vous souhaitez supprimer une seule liste de modifications (par exemple my_changes), déplacez-vous vers le dossier de niveau supérieur de votre copie de travail et exécutez:

svn changelist --remove --recursive --cl my_changes .
40
user2255549

Pour ceux qui se demandent, vous pouvez le faire avec une seule commande avec svn. Accédez simplement au répertoire de niveau des fichiers sous votre liste de modifications et exécutez:

svn changelist --remove --recursive .

Cela fera une boucle sur tous les fichiers du répertoire actuel et tentera de les dissocier de la liste des modifications.

38
lillicoder