Chúng tôi có kho lưu trữ git với các thư mục N.git submodules, gitslave, git subtree hoặc một giải pháp đơn giản
Repo
|-Folder1
|-Folder2
|- ...
|-FolderN
Với các cộng tác viên khác nhau, chúng tôi muốn chia sẻ các thư mục khác nhau. Mỗi cộng tác viên chỉ nên có quyền truy cập vào tập hợp con của các thư mục được cho phép. Cách "tốt" để đạt được điều này bằng cách sử dụng git là gì?
Một câu trả lời là sử dụng git submodules
. Nhưng sau khi tôi đọc bài viết này: https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/ Tôi hiểu rằng bạn cần phải nắm vững git (không phải là trường hợp cộng tác viên của chúng tôi) để không gặp vấn đề khi sử dụng git submodules
.
Tôi đã đọc về một số lựa chọn thay thế có thể có như gitslave
và git subtree
. gitslave
dường như là một giải pháp tốt nhưng vẫn là một giải pháp phức tạp theo ý kiến của tôi.
Đây là giải pháp đơn giản của tôi và tôi muốn biết nếu nó có thể có một số nhược điểm rất xấu:
-Having một kho lưu trữ đơn giản cho mỗi thư mục và một kho lưu trữ cho Repo. Sau đó thêm tất cả các tập tin trong Folder1, ..., FolderN trong Repo chính.
kịch bản -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 kịch bản:
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
}
Những lợi thế của giải pháp này là:
1 - giải pháp đơn giản mà ai cũng có thể hiểu được.
2 - Khả năng cấp quyền truy cập cho từng Thư mục một cách độc lập.
3 - Đối với các nhà phát triển chính (có quyền truy cập vào Repo) kho lưu trữ Repo là khép kín và chứa tất cả lịch sử (trong trường hợp xảy ra sự cố với kho lưu trữ của Folder1, ..., FolderN).
4 - khi nhà phát triển chính thực hiện cam kết với mô tả nhất định, cam kết có cùng mô tả sẽ được tạo cho tất cả các kho thư mục, ngay cả những người không sửa đổi (--allow-empty). không hoàn hảo nhưng giúp theo dõi các phiên bản được gửi bởi các nhà phát triển chính.
EDIT:
Dường như có một lệnh mới tôi đã không nhận thức được git subrepo
...
Có công cụ nào tương tự với tập lệnh của tôi không? –
Xem [fork không chính thức của gitslave] của tôi (https://github.com/joelpurra/gitslave), hy vọng hoạt động nhiều hơn bản gốc kể từ phiên bản 2.0.2. –