代码之家  ›  专栏  ›  技术社区  ›  Tony

使用本地存储库时如何设置权限或更改Git提交进程

git
  •  0
  • Tony  · 技术社区  · 15 年前

    我有一台服务器,其中包含一个中央Git存储库和我的同事的一个开发环境。我的同事的存储库的来源是中央Git存储库,当他有一些代码要共享时,他会将其推到那里。同样,当我有一些代码要共享时,我在本地开发并推送到中央Git存储库,所以我的存储库的源代码也是中央Git存储库。

    问题是,我在“git”用户的主目录下有一个中央git存储库。所以当我推的时候,我实际上是以“git”用户的身份进入服务器的。更清楚地说,我的配置有以下几行:

    $ more .git/config 
    [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*
            url = git@development.mydomain.com:fsg
    [branch "master"]
            remote = origin
            merge = refs/heads/master
    

    当我推的时候,Git会无缝地处理这个ssh+push,我猜是某种Git shell。问题是,当我的同事推送时,他会以自己的身份为一个用户登录,并会收到一堆疯狂的权限错误。有没有一个典型的方法来解决这个问题而不打开Git的目录到一个组?我认为当我推送时,这会有问题,因此会覆盖存储库并重置这些权限。

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  1
  •   David Z    15 年前

    您的同事可以更改其开发环境的源代码,使用ssh url而不是本地文件系统url,这样当他推送时,实际上会将ssh作为 git 用户。连接中的客户机和服务器都是同一台计算机不应该是问题。

    相信 这可以用

    git remote set-url origin ssh://git@server/path
    git remote set-url --push origin ssh://git@server/path
    

    但我自己从来没有这样做过,所以如果您尝试过,我强烈建议您首先在一次性存储库上进行测试。

    编辑 或者只是

    git config --replace-all remote.origin.url ssh://git@server/path
    

    我想。

        2
  •  0
  •   spyle    14 年前

    我们不想使用同一个用户登录,而是希望拥有自己的登录名,然后在推送之后设置权限。这很容易通过设置一个所有开发人员都是其成员的组,然后使用post-receive钩子在对象上设置该组。 /path/to/repo.git/hooks/post-receive :

    chgrp -R git /path/to/repo.git/objects
    

    确保钩子脚本设置了执行权限,这样在成功推送到中央repo时就可以运行该脚本。

    我的环境

    • GIT 1.7.3.2
    • RHEL 5.3