我們有一個包含N個文件夾的git存儲庫。git submodules,gitslave,git subtree或更簡單的解決方案
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
似乎是一個很好的解決方案,但在我看來仍然是一個複雜的解決方案。
這裏是我的簡單的解決方案,我想知道是否可以有一些非常不好的缺點:
-Having爲每個文件夾一個簡單的倉庫和回購的倉庫。然後將所有文件添加到主Repo中的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 - 對於主要開發人員(有權訪問Repo的人),存儲庫Repo是自包含的,並且包含所有歷史記錄(以防Folder1,...,FolderN的存儲庫出現問題)。
4 - 當主開發人員使用給定的描述進行提交時,將爲所有文件夾存儲庫創建具有相同描述的提交,即使沒有修改(--allow-empty),也是如此不完美,但有助於跟蹤主要開發人員提交的版本。
編輯:
似乎有一個新的命令我是不知道的git subrepo
......
是否有做類似我的劇本什麼的任何工具? –
看到我的[非官方的gitslave分支](https://github.com/joelpurra/gitslave),希望自2.0.2以來更加活躍。 –