私たちは、N個のフォルダーを持つgitリポジトリを持っています。gitサブモジュール、gitslave、gitサブツリー、またはより単純なソリューション
Repo
|-Folder1
|-Folder2
|- ...
|-FolderN
さまざまな共同作業者とは異なるフォルダを共有したいと考えています。各共同編集者は、許可されたフォルダのサブセットのみにアクセスする必要があります。 gitを使ってこれを達成する "良い"方法は何ですか?
答えはgit submodules
です。しかし、私がこの記事を読んだ後: https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/ git submodules
を使用するときに問題がないようにするには、git(私たちの共同作業者の場合ではない)の優れた熟練が必要であると理解しました。
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は自己完結型で、すべての履歴(Folder1、...、FolderNのリポジトリに問題が発生した場合)を含んでいます。
4 - 主な開発者が与えられた説明でコミットすると、変更なしのもの(--allow-empty)を含むすべてのフォルダリポジトリに対して、同じ記述を持つコミットが作成されます。完璧ではなく、主な開発者によって提出されたバージョンの追跡に役立ちます。
EDIT:
私はgit subrepo
の知らなかった新しいコマンドがあるようです...
私のスクリプトに類似したツールはありますか? –
私の[gitslaveの非公式なフォーク](https://github.com/joelpurra/gitslave)を参照してください。元々2.0.2以降に活動していたほうがよかったです。 –