【问题标题】:git submodules , gitslave, git subtree or a simpler solutiongit submodules , gitslave, git subtree 或更简单的解决方案
【发布时间】:2016-10-30 10:46:31
【问题描述】:

我们有一个包含 N 个文件夹的 git 存储库。

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 似乎是一个很好的解决方案,但在我看来仍然是一个复杂的解决方案。

这是我的简单解决方案,我想知道它是否有一些非常糟糕的缺点:

-为每个文件夹拥有一个简单的存储库和一个用于 Repo 的存储库。然后在主 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) 的存储库,这当然不是t 完美,但有助于跟踪主要开发人员提交的版本。

编辑:

似乎有一个我不知道的新命令git subrepo ...

【问题讨论】:

  • 有什么工具可以做类似于我的脚本的事情吗?
  • 查看我的unofficial fork of gitslave,希望比自 2.0.2 以来的原始版本更活跃。

标签: git git-submodules git-subtree git-slave git-subrepo


【解决方案1】:

git-subtree 是成功的解决方案,实际上它以更好的“git-native”方式完成了我对脚本所做的工作等等。

这是我们设置环境所遵循的教程的链接。

https://hpc.uni.lu/blog/2014/understanding-git-subtree/

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多