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 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog