Skip to main content

Prise en charge des clients Subversion

Les dépôts GitHub peuvent être accessibles à partir de clients Git et Subversion (SVN). Cet article traite de l’utilisation d’un client Subversion sur GitHub et de certains problèmes courants que vous pourriez rencontrer.

GitHub prend en charge les clients Subversion via le protocole HTTPS. Nous utilisons un pont Subversion pour communiquer des commandes svn à GitHub.

Note

La prise en charge de Subversion sera supprimée avec la version 3.13 de GitHub. Pour plus d'informations, consultez le blog de GitHub.

Fonctionnalités de Subversion prises en charge sur GitHub

Checkout

La première chose que vous voudrez faire est une extraction Subversion. Du fait que les clones Git maintiennent le répertoire de travail (là où vous modifiez vos fichiers) séparé des données du dépôt, il n’y a qu’une seule branche dans le répertoire de travail à la fois.

Les extractions Subversion fonctionnent différemment : comme elles combinent les données du dépôt dans les répertoires de travail, il y a un répertoire de travail pour chaque branche et chaque étiquette que vous avez extraites. Pour les dépôts contenant beaucoup de branches et d’étiquettes, tout extraire peut générer une charge de bande passante supplémentaire, et il vaut donc mieux commencer par une extraction partielle.

  1. Sur GitHub, accédez à la page principale du référentiel.

  2. Au-dessus de la liste des fichiers, cliquez sur Code.

    Capture d’écran de la liste des fichiers dans la page d’accueil d’un dépôt. Le bouton « Code » est mis en évidence avec un encadré orange foncé.

  3. Copiez l’URL du dépôt.

    • Pour cloner le dépôt avec le protocole HTTPS, sous « HTTPS », cliquez sur .

    • Pour cloner le dépôt avec une clé SSH, en incluant un certificat émis par l’autorité de certification SSH de votre organisation, cliquez sur SSH et sur .

    • Pour cloner un dépôt avec l’GitHub CLI, cliquez sur GitHub CLI et sur .

      Capture d’écran du menu déroulant « Code ». À droite de l’URL HTTPS du dépôt, une icône de copie est indiquée en orange foncé.

  4. Effectuez une extraction vide du dépôt :

    $ svn co --depth empty https://github.com/USER/REPO
    > Checked out revision 1.
    $ cd REPO
    
  5. Obtenez la branche trunk. Le pont Subversion mappe la branche principale (trunk) à la branche Git HEAD.

    $ svn up trunk
    > A    trunk
    > A    trunk/README.md
    > A    trunk/gizmo.rb
    > Updated to revision 1.
    
  6. Obtenez une extraction vide du répertoire branches. C’est là où se trouvent toutes les branches vivantes autres que HEAD, et où vous créez des branches de fonctionnalité.

    $ svn up --depth empty branches
    Updated to revision 1.
    

Créer des branches

Vous pouvez également créer des branches en utilisant le pont Subversion vers GitHub.

À partir de votre client svn, vérifiez que la branche par défaut est la branche active en mettant à jour trunk :

$ svn up trunk
> At revision 1.

Ensuite, vous pouvez utiliser svn copy pour créer une autre branche :

$ svn copy trunk branches/more_awesome
> A    branches/more_awesome
$ svn commit -m 'Added more_awesome topic branch'
> Adding    branches/more_awesome

> Committed revision 2.

Vous pouvez vérifier que la nouvelle branche existe bien dans la liste déroulante des branches du dépôt :

Capture d'écran de la page du dépôt. Un menu déroulant, illustré avec une icône de branche et le texte « main », est mis en évidence avec un encadré orange.

Vous pouvez aussi vérifier l’existence de la nouvelle branche via la ligne de commande :

$ git fetch
> From https://github.com/USER/REPO/
> * [new branch]    more_awesome -> origin/more_awesome

Effectuer des commits sur Subversion

Après avoir ajouté quelques fonctionnalités et résolu quelques bogues, vous voudrez commiter ces modifications sur GitHub. Le processus est le même que ce que vous connaissez avec Subversion. Modifiez vos fichiers et utilisez svn commit pour enregistrer vos modifications :

$ svn status
> M    gizmo.rb
$ svn commit -m 'Guard against known problems'
> Sending    more_awesome/gizmo.rb
> Transmitting file data .
> Committed revision 3.
$ svn status
> ?    test
$ svn add test
> A    test
> A    test/gizmo_test.rb
$ svn commit -m 'Test coverage for problems'
> Adding    more_awesome/test
> Adding    more_awesome/test/gizmo_test.rb
> Transmitting file data .
> Committed revision 4.

Basculement entre les branches

Pour basculer entre les branches, vous voudrez probablement commencer par une extraction de trunk :

svn co --depth empty https://github.com/USER/REPO/trunk

Vous pouvez ensuite basculer vers une autre branche :

svn switch https://github.com/USER/REPO/branches/more_awesome

Rechercher le SHA de commit Git pour un commit Subversion

Le serveur Subversion de GitHub expose le SHA de commit Git pour chaque commit Subversion.

Pour voir le SHA de commit, vous devez demander la propriété distante non versionnée git-commit.

$ svn propget git-commit --revprop -r HEAD https://github.com/USER/REPO
05fcc584ed53d7b0c92e116cb7e64d198b13c4e3

Avec ce SHA de commit, vous pouvez, par exemple, rechercher le commit Git correspondant sur GitHub.