Wir haben ein Git-Repository mit N-Ordnern.git submodule, gitslave, git subtree oder eine einfachere Lösung
Repo
|-Folder1
|-Folder2
|- ...
|-FolderN
Mit verschiedenen Mitarbeitern möchten wir verschiedene Ordner teilen. Jeder Mitarbeiter sollte nur Zugriff auf seine erlaubte Teilmenge von Ordnern haben. Was ist der "gute" Weg, dies mit git zu erreichen?
Eine Antwort war, git submodules
zu verwenden. Aber nachdem ich diesen Artikel gelesen habe: https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/ Ich habe verstanden, dass Sie eine gute Beherrschung von Git haben müssen (was nicht der Fall unserer Mitarbeiter ist), um keine Probleme zu haben, wenn Sie git submodules
verwenden.
Ich lese über einige mögliche Alternativen wie gitslave
und git subtree
. gitslave
schien eine gute Lösung zu sein, aber immer noch eine komplexe Lösung meiner Meinung nach.
Hier ist meine einfache Lösung, und ich würde gerne wissen, ob es einige sehr schlechten Nachteile haben kann:
ein einfaches Repository für jeden Ordner und ein Repository für Repo -unter. Dann fügen Sie alle Dateien in Folder1, ..., FolderN im Haupt-Repo hinzu.
-globalpush Skript:
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
}
-globalpull Skript:
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
}
Die Vorteile dieser Lösung sind:
1 - einfache Lösung, die jeder verstehen kann.
2 - Möglichkeit, die Zugriffsrechte für jeden Ordner unabhängig zu geben.
3 - Für die Hauptentwickler (die Zugriff auf Repo haben) ist das Repository Repo eigenständig und enthält den gesamten Verlauf (falls etwas mit den Repositories von Folder1, ..., FolderN nicht funktioniert).
4 - Wenn ein Hauptentwickler einen Commit mit einer gegebenen Beschreibung vornimmt, wird ein Commit mit der gleichen Beschreibung für alle Ordner-Repositories erstellt, auch für solche ohne eine Modifikation (--allow-empty), was natürlich isn ist Es ist zwar perfekt, hilft aber beim Nachverfolgen von Versionen, die von den Hauptentwicklern eingereicht wurden.
EDIT:
Es scheint einen neuen Befehl zu sein, die ich nicht bewusst war git subrepo
...
Gibt es ein Tool, das so etwas wie meine Skripte tut? –
Siehe meine [inoffizielle Gabel von Gitslave] (https://github.com/joelpurra/gitslave), hoffentlich aktiver als das Original seit 2.0.2. –