cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

État des lieux

GitHub était la plateforme de gestion de code source la plus plébiscite par la communauté de l’open source, mais le rachat de GitHub en 2018 par Microsoft n’a pas été bien reçue. La plateforme était largement utilisée par les projets libres.

Même si le nombre de projet hébergé sur GitHub ne cesse de croître, la possibilité de protéger l’accès aux dépôts et le fait que ce soit le dieu du copyright qui en est les clés a changé beaucoup de choses.

Les dépôts git ont tendance à disparaître, ils sont soit déplacés, soit protégés, soit censurés (une nouveauté sur GitHub), soit purgés…

  • Disparition des « repositories »
    • Pourquoi certains projets sont déplacés ? Deux raisons à cela : En rachetant GitHub, Microsoft s’est offert les clés de l’open source, sincèrement cela fait peur. L’arrivée d’applications comme GitLab et GitTea qui permettent à tout à chacun d’héberger son serveur git, il y a donc une décentralisation des dépôts en cours.

    • Pourquoi certains projets sont protégés ? Le nouveau modèle économique de GitHub est passé d’une plateforme de l’open source vers une plateforme de dépôts privés déportées. GitHub fait partie intégrante de certains modèles du « cloud ». Toutes les alternatives proposent, maintenant, ce genre de service.

    • Pourquoi certains projets sont censurés ? À plusieurs reprises GitHub a censuré des dépôts très utilisés, le dernier en date dont j’ai été victime est le projet recensant les noms de domaines utilisés par les sites pornographiques qui servait à alimenter système de contrôle parental, comme celui de nombreux autres plateforme à travers le monde. Bien évidement tous les forks de ce projet présent sur GitHub sont également bloqués.

    • Pourquoi certains projets sont purgés ? Parfois pour faire disparaître le contenu d’un dépôt son auteur choisi de purger tous les commits présents. Dans ce cas, toutes les copies basées sur un git clone --mirror seront également affectés, perdant l’ensemble des données. Cette solution à d'autre défauts, en particulier, certain commits peuvent disparaitres (une suppression de branche non mergé que vous utilisez).

Si vous avez une infrastructure s’appuyant sur des projets open source, vous seriez bien avisé d’en avoir une copie sur un autre dépôt que le dépôt original, soit sur votre propre infrastructure.



Faire un dépôt mirroir

La méthode natuelle avec git est la suivante:

git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git

Si vous souhaitez utiliser votre propre code, ce n'est pas une bonne idée de modifier le nouveau dépot, je vous conseille de faire un fork et de travailler sur le fork.



Construire votre propre solution de copie

Si pour quelques raisons que ce soit, vous deviez mettre en place une solution n'utilisant pas l'option --mirror, voici une base de code pour construire votre propre solution de copie

  • git-mirror.sh
    #!/usr/bin/env bash
    
    _source_="$1"
    _target_="$2"
    _git_cmd_="$( command -c git )"
    
    if [ -z "${_source_}" ]; then
      echo "$( date +"%d.%m.%Y %H:%M:%S" ) ###ERROR### You must specify a source directory. Process aborted."
      exit 101
    fi
    
    if [ -z "${_target_}" ]; then
      echo "$( date +"%d.%m.%Y %H:%M:%S" ) ###ERROR### You must specify a target directory. Process aborted."
      exit 102
    fi
    
    if [[ ${_target_%%/*} != 'ssh:' ]]; then
      echo "$( date +"%d.%m.%Y %H:%M:%S" ) ###ERROR### Target is internal, so it must start with ssh:"
      exit 104
    fi
    
    if [ -z "${_git_cmd_}" ]; then
      echo "$( date +"%d.%m.%Y %H:%M:%S" ) ###ERROR### Git command not found. Process aborted."
      exit 105
    else
      echo "$( date +"%d.%m.%Y %H:%M:%S" ) --- Use Git command: '${_git_cmd_}'"
    fi
    
    _repo_name_=${_target_##*/}
    echo "$( date +"%d.%m.%Y %H:%M:%S" ) --- Start processing repository '${_repo_name_}'"
    
    git clone --bare "${_source_}"
    pushd "./${_repo_name_}"
    git remote add __mirror__ "${_target_}"
    git fetch --all
    git fetch --tags
    git push --all __mirror__
    git push --tags __mirror__
    popd
    
    echo "$( date +"%d.%m.%Y %H:%M:%S" ) --- Repository '${_repo_name_}' fully synchronized."
    exit 0
    


Références

ᦿ


ℹ 2006 - 2021 | 🏠 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog