我正与一个包含以下项目的私人gitlab存储库的约10个开发团队合作:
除了 Misc 之外,其中每个都有自己的 Maven 依赖关系和单元测试包含在其特定文件夹中。
我们正在使用git-flow
,所以所有分支都会在某个时候与一个develop
分支合并。
问题:
我们目前只销售客户端&界面与源,并希望我们的客户只能访问这些(子)项目,包括他们的历史记录,同时能够轻松推送更新,并使用gitlab的
issues
功能。
我的想法:
git submodules
,但这个解决方案似乎与私有存储库完美无缺。 (如果有的话 - 已经阅读了很多关于无效路径的问题)Client
和Interface
的超级分支,我可以添加另一个新的remote
存储库,只需将这两个分支推送到它。这个解决方案的问题在于,我们没有经验丰富的开发人员和一个肮脏的推动或来自develop
分支的一次推送基本上会使整个想法变得毫无用处。风险太高了。continuous integration
将在不同的回购中运行,并且我们自己的问题也会被跟踪。由于这是一个非常具体的设置和计划,我会对您的想法感兴趣,以解决这样的情况。谢谢你的时间。
答案 0 :(得分:0)
如果找到更优雅的解决方案或我们遇到麻烦,我将更新此帖子。
此解决方案还会发布您项目的git历史记录。 您可以根据自己团队的工作清洁程度进行过滤,不过:{{3} }。您应该在清洁分支后执行此步骤。
此解决方案的目的是...
确保您有另一个备份并进行彻底的测试。我们在某些时候使用了force命令。这可以在 OUR 存储库上完美运行,但可能会引起我尚不了解的副作用。如果您遇到它们,请告诉我,以便我更新此条目。
在
private local repository
上执行的步骤:
# Assure we are on the latest stable state within our main repo
git checkout <CURRENT_STATE>
# Create a new deployment branch from HEAD
git branch <DEPLOYMENT_BRANCH> HEAD
# Enter the new branch
git checkout <DEPLOYMENT_BRANCH>
[选项1]::如果您打算删除目录的路径结构并将所有文件部署到新存储库的根目录中,请使用以下策略
# Filter every comment outside of this subdirectory (execute from root directory of repo)
git filter-branch -f --subdirectory-filter <DIRECTORY_PATH> -- <DEPLOYMENT_BRANCH>
[选项2]:过滤并保留目录树
##
# Force filter-branch using the tree-filter (keeps the
# directory-structure) while deleting all files outside
# this directory (Check if you are on <DEPLOYMENT_BRANCH>
# first). Folders are kept, but since Git does not push
# empty folders this is no problem
git filter-branch --tree-filter -f \
'find . -path <DIRECTORY_PATH> -prune -o -type f -print0 | xargs -0 rm -f' \
--prune-empty HEAD
我们想添加master
分支的.gitignore
文件。
# Take master .gitignore and add it to the branch
git checkout master -- .gitignore
您还应该更新它以忽略所有其他目录,但是您的<DIRECTORY_PATH>
:
##
# In .gitignore:
# Ignore everything:
*
# Except for these directories:
!path/
!path/*/
!.gitignore
阶段并提交以下更改:
git add .gitignore
git commit -m "Add .gitignore"
通知其他开发人员在其
private local repositories
中跟踪新分支:
##
# If you would pull this branch, Git would attempt a merge it into your current HEAD.
# Do NOT pull! Instead start tracking the remote branch
git checkout --track origin/<DEPLOYMENT_BRANCH>
在新的
destination / deployment repository
上执行的步骤
克隆或创建destination / deployment repository
。在其中添加一个遥控器到我们的private local repository
并将分支合并到主节点:
# Add remote to local private repo
git remote add local <PATH/TO/PRIVATE/REPO/.git>
git checkout master
[选项1] :拉取并因此将更改直接合并到母版中
# Pull changes from private repo and allow unrelated histories
git pull local <DEPLOYMENT_BRANCH> --allow-unrelated-histories
[选项2]:跟踪分支而不进行即时合并
# Track branches for more granular control
git checkout --track local/<DEPLOYMENT_BRANCH>
部署:
# Deploy option 1: (For option 2 simply push your tracked branches)
git push origin master