我们使用托管在远程位置并共享的 git 存储库。我们希望 repo 是用户和组可读和可写的,但对其他人没有任何权限。远程仓库由不同的用户(比如 rUser)拥有。我已经在本地仓库和远程仓库中将 core.sharedRepository 设置为 0660。另外,我的 umask 是 0027。因此,每当我创建一个新文件时,它都没有其他文件的权限。
尽管如此,出于某种原因,每当我将更改推送到远程仓库时,它都会在 repo.git/objects/ 目录中创建一些具有权限 -r 的新对象--r--r--。更奇怪的是,它使我(而不是远程用户)成为目录/文件的所有者。知道发生了什么事吗?
我试图通过在 stackoverflow 上查看几个看似相关的问题来找到答案,但找不到任何答案。
最佳答案
注意:我假设您正在使用基于 SSH 的访问机制,每个用户都以自己的用户身份登录服务器(即,您没有多个用户登录到一个帐户来访问存储库)。如果这个假设不成立,那么以下答案可能不会完全有用。
您个人存储库的 core.sharedrepository 设置和您用来访问它的 umask 与远程存储库上使用的所有权和权限无关。
在远程存储库中将 core.sharedrepository 设置为 0660 是获得您想要的内容的正确方法。远程访问用户的 umask 也无关紧要,因为 Git 会在看到 core.sharedrepository 的 0xxx 值时覆盖掩码.您确实需要确保所有文件和目录都由您的公共(public)组拥有,并且权限正确(所有目录都为 2770(或者只是 770 BSD-ish 系统);440 对于 objects/?? 和 /objects/pack/ 下的文件;660用于其他文件)。
创建文件的用户拥有新文件是正常的。在非 BSD 系统上,您需要目录上的 setgid 位(2000 位)以使新条目继承其父目录的组所有者。 user-owner 很少被继承(FreeBSD 可以配置为使用 setuid 位来完成它,但这在正常配置中不使用)。因此,所有文件和目录都应该有相同的、共同的、组所有者,但是每次写入存储库(例如推送)都会留下一些文件和/或目录,这些文件和/或目录由写入用户拥有1(即不要求任何一个用户(您的 rUser?)是所有文件和目录的用户所有者;任何需要访问存储库的用户都应该是普通组)。
<子> 1 每个用户显然都会拥有他们创建的任何文件/目录,但他们也会拥有他们修改的大部分文件,因为 Git 使用“原子重写”(它将新内容写入同一目录中的新的单独文件,然后在原始文件之上重命名它)。
Git 覆盖新文件的 umask 的方式可能存在错误。究竟哪些文件获得的权限太宽?您在远程端访问存储库的 Git 版本是什么?您在远程端运行什么操作系统?
我无法使用 Git 1.7.4.1 在我的 Unixy 机器上使用两个用户和一个公共(public)组重现此问题。
您可以尝试稍微简化一下场景。尝试直接从服务器本身推送到远程存储库(即制作本地克隆并推送到一次性分支)。与在中间进行某种传输相比,进行仅本地访问可以更容易地检查您的假设(umask;uid;gids;用户和组所有权,以及文件和目录在推送之前和之后的权限) (Git 自己的基于 SSH 的传输,或者可能无法完全保真地映射 ID 和权限的网络文件系统)。
子>关于git - 让 git push 尊重权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5264968/
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe
关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec
我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co
我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://
Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文
我正在为我的用户实现一些rubyonrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需
我正在关注Ryan的RailsCast第339集。我已经安装了rbenv并且可以运行ruby-v。我退出了我的session,当我试图返回时(通过root的sudeployer,我得到了这个错误/home/deployer/.rbenv/bin/rbenv:line20:cd:/root:Permissiondenied这是rbenv文件:#!/usr/bin/envbashset-e[-n"$RBENV_DEBUG"]&&set-xresolve_link(){$(type-pgreadlinkreadlink|head-1)"$1"}abs_dirname(){localcwd="
如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答
我在运行Ubuntu10.04LTS的远程VPS机器上以生产模式运行RubyonRails3.0.9(在开发模式下,我在MACOSSnow上使用RoRLeopard),我想知道如何管理以下场景。我使用Apache2和PhusionPassenger并且我将虚拟主机设置为如下所示:ServerNameproject_name.comDocumentRoot/srv/www/project_name.com/publicAllowOverrideallOptions-MultiViews此外,我使用Paperclipgem,由于网上很多人在生产模式下使用它,我在处理(图像)文件时遇到以下错