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
です。
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 - 主な開発者 (Repo にアクセスできる) の場合、リポジトリ Repo は自己完結型であり、すべての履歴が含まれています (Folder1、...、FolderN のリポジトリで問題が発生した場合に備えて)。
4 - 主な開発者が特定の説明でコミットを行うと、すべてのフォルダー リポジトリに対して同じ説明のコミットが作成されます。これは、変更がない場合 (--allow-empty) であっても、もちろん完全ではありませんが、主な開発者によって提出されたバージョンを追跡するのに役立ちます。
編集 :
私が知らなかった新しいコマンドがあるようですgit subrepo
...