git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Access different NAMESPACE of remote repo from client side
@ 2013-11-15  8:19 Jiang Xin
  2013-11-15  9:49 ` [PATCH] shell: allow git command with --namespace option Jiang Xin
  2013-11-15 14:25 ` Access different NAMESPACE of remote repo from client side Sitaram Chamarty
  0 siblings, 2 replies; 6+ messages in thread
From: Jiang Xin @ 2013-11-15  8:19 UTC (permalink / raw)
  To: Git List; +Cc: Josh Triplett, Jamey Sharp

GIT_NAMESPACE is designed to be used mainly on the server side, that
the server can serve multiple git repositories while share one single
repository storage using different GIT_NAMESPACE settings.

Since we know that one remote repository hosts multiple namespaces,
can we handle different namespaces in one local repository? Or can
we access the proper namespace of the remote repository without
complicated server settings?

At least there are three solutions for ssh protocol: pass namespace
through environment, pass namespace in URL, or pass namespace from
the proper settings of remote.<name>.receivepack and
remote.<name>.uploadpack.

Solution 1: passing the namespace through environment.

 1. Set '/etc/sshd_config' in the server side as the following,
    so that the ssh server can accept GIT_NAMESPACE environment.

        AcceptEnv LANG LC_* GIT_NAMESPACE

 2. In the client side, When connect to ssh server, must send the
    GIT_NAMESPACE environment. This can be done with a remote-ext
    url:

        $ git remote add foo \
          'ext::ssh -o SendEnv=GIT_NAMESPACE git@server %S 'path/to/repo.git'

Then the remote "foo" is GIT_NAMESPACE aware, but when operate on
this remote, must provide proper "--namespace" option.

    $ git --namespace=foo push foo master
    $ git --namespace=foo fetch foo
    $ git --namespace=foo ls-remote foo
    $ git --namespace=foo remote prune foo
    $ git --namespace=foo archive --remote foo HEAD

But provide a "--namespace" option is error-prone, but we may invent
"remote.<name>.namespace" or something to set GIT_NAMESPACE
automatically when push to or fetch from remote server.

Solution 2: passing the namespace in URL.

Again use remote-ext style URL to access remote repository:

    $ git remote add foo \
        'ext::ssh git@server git --namespace foo %s path/to/repo.git'

    $ git remote add bar \
        'ext::ssh git@server git --namespace bar %s path/to/repo.git'

But if the remote server use a limit shell (such as git-shell or
gitolite), the above URLs won't work. This is because these git
specific shell (git-shell or gitolite) do not like options.

Solution 3: use custom receivepack and uploadpack. e.g.

    [remote "foo"]
        url = ssh://git@server/path/to/repo.git
        receivepack = git --namespace foo receive-pack
        uploadpack = git --namespace foo upload-pack
        fetch = +refs/heads/*:refs/remotes/foo/*

    [remote "bar"]
        url = ssh://git@server/path/to/repo.git
        receivepack = git --namespace bar receive-pack
        uploadpack = git --namespace bar upload-pack
        fetch = +refs/heads/*:refs/remotes/foo/*

Just like solution 2, these settings won't work without a patched
git-shell or gitolite.

I will send a patch in next email to address the latter two cases.


-- 
Jiang Xin

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-11-16  9:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-15  8:19 Access different NAMESPACE of remote repo from client side Jiang Xin
2013-11-15  9:49 ` [PATCH] shell: allow git command with --namespace option Jiang Xin
2013-11-15 14:25 ` Access different NAMESPACE of remote repo from client side Sitaram Chamarty
2013-11-15 14:47   ` Sitaram Chamarty
2013-11-16  8:00     ` Jiang Xin
2013-11-16  9:13       ` Sitaram Chamarty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).