Git

Creer module importable via pip

Architecture :
README.md
LICENCE.txt
setup.py

from setuptools import setup

setup(
    name='pkg name',
    version='1.0',
    description='a pip-installable pkg',
    license='APGL',
    packages=['pkgname'],
    author='Pierre',
    author_email='',
    keywords=[],
    url='framagit'
)

requirements.txt
.gitignore

*~
.#*
#*
#*#
*__pycache__*
*.pyc
docs/build/*
env_module
env_module/*

.gitlab-ci.yml
module_dir/

Fichier requirements.txt des autres projets

git+ssh//git@framagit.org/path:id_commit
git+https://framagit.org/path:branch_name
git+https://framagit.org/path:tag

Créer un nouveau repo à partir de sous-dossiers

Attention : travailler sur une copie ! (même si tout doit être à jour avant)

Attention 2 : il manque peut être des git add/commit : ne pas forcer et les faire !

L’objectif est de créer un sous-module à partir de ./lib/one, lib/two, lib/three.

* Il est donc conseillé de faire un $ cd .. && git clone ... new_mod && cd new_mod
* ... et bien évidemment basculer sur la branche qui nous intéresse :$ git checkout -b test <name of remote>/test

* On va commencer par sélectionner les dossiers à déplacer [1] :

$ git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT --  lib/one  lib/two lib/three' --prune-empty -- --all

Ici, l’historique des fichiers est conservés ; s’ils ont été déplacés avant, on doit ajouter leurs anciens chemins (sinon, ceux-ci ne seront pas pris en compte dans l’historique !).

* Il faut ensuite déplacer les fichiers avec (par exemple), pour conserver l’historique

$ git mv ./lib/one ./one  # etc.
$ rmdir ./lib

* Ajoutons le nouveau repo distant, vide :

$ git remote add newrepo git@framagit.org:...

* Supprimons la branche "main" actuelle (qui est une copie de la branche main de l’origine) et recréeons la pour être la future main du nouveau repo :

$ git branch -d main && git checkout -b main

* Poussons les modifications :

$ git push -u newrepo main

* Retournons dans l’ancien repo et créons le nouveau sous-module :

$ cd ../old_repo
$ mkdir lib/external && cd lib/external
$ git submodule add git@framagit.org:...
$ git submodule update --recursive --init
$ git submodule update --recursive --remote

* Et nettoyons, committons, bref, ayons un truc propre ^^

$ rm -r lib/one lib/two lib/three
$ git commit -m "clean old"

* Une fois cela fait, il restera bien évidemment à mettre à jour les différents chemins des import

Merger 2 repos

cd repo2
git checkout master
git remote add r1remote **url-of-repo1**
git fetch r1remote
git merge r1remote/master --allow-unrelated-histories
git remote rm r1remote