TFS : Faire des rollback avec TFS 2010 et TFS 11 2

TFS : Faire des rollback avec TFS 2010 et  TFS 11

J’ai eu plusieurs fois des questions sur comment marche les rollback dans Visual Studio 2010 et Team Foundation Server 2010 ; plutôt que de me répéter tout le temps j’ai décidé de faire un billet :)

Note : bien que les captures d’écran soient sous Visual Studio 11, le principe est le même sous Visual Studio 2010.

Dans TFS le principe du rollback ou de l’annulation d’un changeset est d’obtenir une nouvelle version du ou des fichiers résultat sous la forme d’une modification en attente :

image

La modification sera alors, après archivage, visible dans l’historique des fichiers. (et pourra être annulée si besoin :) )

Mise à jour 25/08/2014 : correction du résultat du rollback C22, merci B€N :)

Depuis TFS 2010 il est possible de faire des rollback sans passer par les PowerTools en utilisant la ligne de commande via tf.exe rollback. La documentation est disponible sur la MSDN http://msdn.microsoft.com/fr-fr/library/dd380776(VS.100).aspx. Ce n’est pas des plus « user friendly » :(

Heureusement Microsoft à ajouter une interface graphique avec les TFS PowerTools August 2011 qui est en standard dans VS 11. Dans l’explorateur de sources, si vous faites un clic droit sur un élément vous verrez la commande Rollback :

image

Si vous cliquez dessus vous verrez alors la fenêtre de dialogue permettant de spécifier les différentes options de rollback :

SNAGHTML8ad581

Cette fenêtre vous permet de spécifier l’élément sur lequel faire le rollback et le type de rollback que vous souhaitez faire. Pour voir à quoi correspondent les 3 types de rollback nous utiliserons le code suivant :

Changeset 21

public class RollbackDemo
{
    public int GetValue(int i)
    {
        return i;
    }

    public DateTime GetDate()
    {
        return DateTime.Now;
    }
}

Changeset 22

public class RollbackDemo
{
    public int GetValue(int i)
    {
        return i + 1;
    }

    public DateTime GetDate()
    {
        return DateTime.Now;
    }
}

Changeset 23

public class RollbackDemo
{
    public int GetValue(int i)
    {
        return i + 1;
    }

    public DateTime GetDate()
    {
        return DateTime.Today;
    }
}

L’option Rollback changes from a single changeset permet d’annuler les modifications ajouté via un changeset particulier tout en gardant les modifications qui sont intervenu après. Pour cela Visual Studio va utiliser le même mécanisme que pour un merge en se basant sur les versions du fichier :

  • Avant le changeset sélectionné,
  • Le changeset sélectionné,
  • La dernière version du fichier.

Dans notre exemple si l’on décide d’annuler le changeset 22 on obtiendra alors automatiquement le résultat :

public class RollbackDemo
{
    public int GetValue(int i)
    {
        return i;
    }

    public DateTime GetDate()
    {
        return DateTime.Today;
    }
}

La méthode GetValue est revenue à sa définition originale (changeset 21) alors que la méthode GetDate est restée inchangée !

Bien entendu si un conflit existe VS proposera à l’utilisateur de le résoudre manuellement comme pour un merge :

image

L’option Rollback changes from a range of changesets est la même que la précédente mais appliquée à un ensemble de changeset consécutifs. Attention à l’utilisation de cette option, il y a de gros risque d’y avoir des conflits (surtout si la plage de changeset est importante) pour lesquels il faudra se tordre le cerveau pour les résoudre :)

La dernière option Rollback to a specific version est tout simplement une annulation de l’ensemble des modifications survenues depuis la version spécifiée. On pourra spécifier la version voulu via plusieurs options :

  • Numéro de changeset,
  • Date,
  • Etiquette,
  • Version dans le workspace

Si l’on décide revenir au changeset 21, on se retrouvera alors avec le code suivant :

public class RollbackDemo
{
    public int GetValue(int i)
    {
        return i;
    }

    public DateTime GetDate()
    {
        return DateTime.Now;
    }
}

Les méthodes GetValue et GetDate sont revenues à leurs définitions exactes du changeset 21.

Quelque soit le type de rollback choisi la mise à jour n’est faite que sur l’élément sélectionnée, il faut donc faire attention avec les dépendances (par exemple un rollback supprimant une fonction toujours utilisée dans un autre fichier) !

Voila j’espère que les différents types de rollback sont maintenant plus clair. Notez aussi que l’ensemble de ce que je vous ai montré marche avec la ligne de commande :)

Carpe Diem.

2 thoughts on “TFS : Faire des rollback avec TFS 2010 et TFS 11

  1. Reply B€N août 22,2014 15:33

    Merci pour ses éclaircissements sur les rollback ! Pas facile de trouver des explications claires sur le net :)

    Il y a cependant une petite erreur dans le résultat du rollback du changeset 22, ce qui rend ce billet un peu flou ^^

    Ne serait-ce pas plutôt ce résultat qui est attendu ?


    public class RollbackDemo
    {
    public int GetValue(int i)
    {
    return i;
    }

    public DateTime GetDate()
    {
    return DateTime.Today;
    }
    }

    Sinon c’est parfait ;^) Merci encore !

  2. Reply Guillaume Rouchon août 25,2014 07:19

    Merci pour le commentaire, j’ai corrigé l’article.

Leave a Reply to Guillaume Rouchon Cancel Reply

  

  

  

CAPTCHA *