подмодули git, gitslave, поддерево git или более простое решение
у нас есть репозиторий git с N папками.
Repo
|-Folder1
|-Folder2
|- ...
|-FolderN
С различными сотрудниками мы хотели бы поделиться различными папками. Каждый сотрудник должен иметь доступ только к своему разрешенному подмножеству папок. Каков "хороший" способ достичь этого с помощью git?
ответ был использовать git submodules
. Но после того как я прочитал эту статью:
https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/
Я понял что вам нужно иметь хорошее мастерство git (что не относится к нашим сотрудникам), чтобы не иметь проблем при использовании git submodules
.
Я читал о некоторых возможных альтернативах, таких как gitslave
и git subtree
. gitslave
казалось хорошим решением, но все же сложным решением, на мой взгляд.
вот мое простое решение и я хотел бы знать, если это может иметь очень плохие недостатки :
- наличие простого репозитория для каждой папки и репозиторий для РЕПО. Затем добавьте все файлы в Folder1,..., FolderN в главном РЕПО.
-сценарий 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
}
-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
}
преимущества этого решения являются следующими:
1 - Простое решение, которое каждый может понять.
2-возможность предоставления прав доступа для каждой папки самостоятельно.
3 - для основных разработчиков (имеющих доступ к РЕПО) репозиторий РЕПО является автономным и содержит всю историю (в случае, если что-то пойдет не так с репозиториями Folder1,..., FolderN).
4 - Когда основной разработчик делает фиксацию с заданным описанием, фиксация с тем же описанием будет создана для всех репозиториев папок, даже без изменений (--allow-empty), что, конечно, не идеально, но помогает отслеживать версии, представленные основными разработчиками.
изменить :
кажется, есть новая команда, о которой я не знал git subrepo
...
1 ответов
git-subtree было выигрышным решением, и на самом деле он делает то, что я делал с моими скриптами и многое другое, лучше "git-native".
вот ссылка на учебник, который мы следовали, чтобы настроить нашу среду.