Nous avons un dépôt git avec N dossiers.git submodules, gitslave, git subtree ou une solution plus simple
Repo
|-Folder1
|-Folder2
|- ...
|-FolderN
Avec différents collaborateurs, nous aimerions partager différents dossiers. Chaque collaborateur doit avoir accès uniquement à son sous-ensemble de dossiers autorisé. Quel est le "bon" moyen d'y parvenir en utilisant git?
Une réponse a été d'utiliser git submodules
. Mais après avoir lu cet article: https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/ J'ai compris que vous devez avoir une bonne maîtrise de git (ce qui n'est pas le cas de nos collaborateurs) afin de ne pas avoir de problèmes lors de l'utilisation git submodules
. J'ai lu environ quelques alternatives possibles comme gitslave
et git subtree
. gitslave
semblait être une bonne solution mais toujours une solution complexe à mon avis.
Voici ma solution simple et je voudrais savoir si elle peut avoir des inconvénients très mauvais:
-ayant un référentiel simple pour chaque dossier et un référentiel pour Repo. Ensuite, ajoutez tous les fichiers dans Folder1, ..., FolderN dans le Repo principal.
scénario -globalpush:
function globalpush(){
REPOS="$HOME/Repo/
$HOME/Repo/Folder1
$HOME/Repo/Folder2
$HOME/Repo/Folder3
# ...
$HOME/Repo/FolderN"
#do not show untracked files
git config status.showuntrackedfiles no
read -p "Commit description: " description
for repo in ${REPOS}
do
# if the repo folder exists
if [ -d $repo ]
then
# Go inside the repo
cd $repo
echo "-----PUSHING REPO : "$repo"-----"
#add all modified all deleted TRACKED files
git add -u .
git commit --allow-empty -m "$description"
git push
else
echo "-----COULD NOT FIND : "$repo"-----"
fi
done
#show untracked files again
git config status.showuntrackedfiles normal
}
scénario -globalpull:
function globalpull(){
REPOS="$HOME/Repo/
$HOME/Repo/Folder1
$HOME/Repo/Folder2
$HOME/Repo/Folder3
# ...
$HOME/Repo/FolderN"
for repo in ${REPOS}
do
# if the repo folder exists
if [ -d $repo ]
then
# Go inside the repo
cd $repo
# pull the modifs.
echo "-----PULLING REPO : "$repo"-----"
git pull
else
echo "-----COULD NOT FIND : "$repo"-----"
fi
done
}
Les avantages de cette solution sont:
1 - Une solution simple que tout le monde peut comprendre.
2 - Possibilité de donner les droits d'accès pour chaque dossier indépendamment.
3 - Pour les développeurs principaux (qui ont accès à Repo) le référentiel Repo est autonome, et contient tout l'historique (en cas de problème avec les dépôts de Folder1, ..., FolderN). - quand un développeur principal fait un commit avec une description donnée, un commit avec la même description sera créé pour tous les dépôts Folders, même ceux sans modification (--allow-empty), ce qui bien sûr est n'est pas parfait mais permet de suivre les versions qui sont soumises par les principaux développeurs.
EDIT:
Il semble y avoir une nouvelle commande que je ne connaissais pas git subrepo
...
est-il un outil qui fait quelque chose de similaire à mes scripts? –
Voir mon [fourche non officiel de gitslave] (https://github.com/joelpurra/gitslave), espérons plus actif que l'original a été depuis 2.0.2. –