Ă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
- Too Perfect a Mirror,
- How to properly mirror a git repository,
- Duplicating a repository,
- Screw the Mirrors.
኿