How to use git namespace to hide branches

前端 未结 3 1102
夕颜
夕颜 2021-01-03 06:23

Background

I\'m working with a large team using git for version control. The normal flow is:

  • People selecting a ticket from the \"backlog queue\".
3条回答
  •  别那么骄傲
    2021-01-03 07:09

    Long story short: you can - but it may be a bit tricky.

    You should use the namespace concept (give a look here: gitnamespaces)

    Quoting from the docs:

    Git supports dividing the refs of a single repository into multiple namespaces, each of which has its own branches, tags, and HEAD. Git can expose each namespace as an independent repository to pull from and push to, while sharing the object store

    and

    Storing multiple repositories as namespaces of a single repository avoids storing duplicate copies of the same objects, such as when storing multiple branches of the same source.


    To activate a namespace you can simply:

    export GIT_NAMESPACE=foo

    or

    git --namespace=foo clone/pull/push

    When a namespace is active, through git remote show origin you can see only the remote branches created in the current namespace. If you deactivate it (unset GIT_NAMESPACE), you will see again the main remote branches.


    A possible workflow in your situation may be:

    Create a feature branch and work on it

    export GIT_NAMESPACE=foo
    git checkout -b feature_branch
    # ... do the work ...
    git commit -a -m "Fixed my ticket from backlog"
    git push origin feature_branch # (will push into the namespace and create the branch there)
    

    Merging upstream

    unset GIT_NAMESPACE
    git checkout master
    git pull (just to have the latest version)
    git merge --squash --allow-unrelated-histories feature_branch
    git commit -a -m "Merged feature from backlog"
    git push # (will push into the main refs)
    

    The tricky part

    Namespace provides a complete isolation of branches, but you need to activate and to deactivate namespace each time

    Pay attention

    Pay attention when pushing. Git will push in the current namespace. If you are working in the feature branch and you forgot to activate the namespace, when pushing, you will create the feature branch in the main refs.

提交回复
热议问题