2016-06-28 125 views
8

我們有一個包含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時沒有問題。

我讀了一些可能的替代方案,如gitslavegit subtreegitslave似乎是一個很好的解決方案,但在我看來仍然是一個複雜的解決方案。

這裏是我的簡單的解決方案,我想知道是否可以有一些非常不好的缺點:

-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 ......

+0

是否有做類似我的劇本什麼的任何工具? –

+0

看到我的[非官方的gitslave分支](https://github.com/joelpurra/gitslave),希望自2.0.2以來更加活躍。 –

回答