已经张贴在这里,所以随时回答。
每次我提交/推送的东西到Git服务器的文件权限更改(存储库中的所有添加/编辑的文件没有读取和执行组访问)。 因此trac不能访问版本库。
我是否需要更改文件夹的权限不同?
chmod u = rwx,g = rx,o = -R / home / git / repositories
或者我需要设置gitolite莫名其妙地写入不同的权限的文件?
问候,klemens
设置umask /默认umask没有效果,因为gitolite有它自己的设置。
在〜/ .gitolite.rc
$ REPO_UMASK = 0027;
设置为你喜欢:)
Git只跟踪文件名和这些文件的数据。 它不跟踪文件系统元数据(ownreship,permissions,…)。
如果您希望所有文件具有相同的权限,则umask可以成为有效的解决scheme。
我现在用Git跟踪多台服务器上的系统文件。 我需要一种跟踪权限和数据更改的方法。 我写了一个Ruby脚本来捕获文件权限/所有权并将其放入一个文件中。 这个文件现在可以通过git来跟踪。 每当需要恢复元数据时,我都会使用另一个读取文件并恢复权限的Ruby脚本。
3年来,我经常使用这些脚本,他们没有让我失望。
他们来了:
#!/usr/bin/ruby RM = "/bin/rm" SORT = "/usr/bin/sort" TMP = "/tmp/save_fs_permissions_#{Time.now.to_i}_#{rand * 899 + 100}" require 'find' IGNORE = [".git"] def numeric2human(m) return sprintf("%c%c%c%c%c%c%c%c%c", (m & 0400 == 0 ? ?- : ?r), (m & 0200 == 0 ? ?- : ?w), (m & 0100 == 0 ? (m & 04000 == 0 ? ?- : ?S) : (m & 04000 == 0 ? ?x : ?s)), (m & 0040 == 0 ? ?- : ?r), (m & 0020 == 0 ? ?- : ?w), (m & 0010 == 0 ? (m & 02000 == 0 ? ?- : ?S) : (m & 02000 == 0 ? ?x : ?s)), (m & 0004 == 0 ? ?- : ?r), (m & 0002 == 0 ? ?- : ?w), (m & 0001 == 0 ? (m & 01000 == 0 ? ?- : ?T) : (m & 01000 == 0 ? ?x : ?t))) end File.open(TMP, "w") do |permissions_file| # TODO: Instead of the current dir, find the .git dir, which could be # the same or outside of the current dir Find.find(".") do |path| next if IGNORE.collect {|ig| !!(path[2..-1] =~ /\A#{ig}/)}.include? true next if File.symlink?(path) stat = File.lstat(path) type = stat.ftype[0..0].sub('f', '-') # Single character for the file type # But a "-" istead of "f" owner_id = stat.uid group_id = stat.gid rules = "#{type}#{numeric2human(stat.mode)}" permissions_file.puts "#{path} #{rules} #{owner_id} #{group_id}" end end `#{SORT} #{TMP} > ./fs-permissions` `#{RM} #{TMP}`
fs-permissions中。 #!/usr/bin/ruby # Restore from... FROM = "./fs-permissions" MKDIR = "/bin/mkdir" CHMOD = "/bin/chmod" CHOWN = "/bin/chown" known_content_missing = false def numeric2human(m) return sprintf("%c%c%c%c%c%c%c%c%c", (m & 0400 == 0 ? ?- : ?r), (m & 0200 == 0 ? ?- : ?w), (m & 0100 == 0 ? (m & 04000 == 0 ? ?- : ?S) : (m & 04000 == 0 ? ?x : ?s)), (m & 0040 == 0 ? ?- : ?r), (m & 0020 == 0 ? ?- : ?w), (m & 0010 == 0 ? (m & 02000 == 0 ? ?- : ?S) : (m & 02000 == 0 ? ?x : ?s)), (m & 0004 == 0 ? ?- : ?r), (m & 0002 == 0 ? ?- : ?w), (m & 0001 == 0 ? (m & 01000 == 0 ? ?- : ?T) : (m & 01000 == 0 ? ?x : ?t))) end def human2chmod(mode) raise unless mode =~ /([r-][w-][xtsTS-])([r-][w-][xtsTS-])([r-][w-][xtsTS-])/ triple = [$1, $2, $3] u,g,o = triple.collect do |i| i.sub('s', 'sx').sub('t', 'tx').downcase.gsub('-', '') end return "u=#{u},g=#{g},o=#{o}" end File.open(FROM).each do |permissions| raise unless permissions =~ /\A(([^ ]*? )+)([^ ]+) ([^ ]+) ([^ ]+)\Z/ path, rules, owner_id, group_id = $1, $3, $4, $5 path = path.strip owner_id = owner_id.to_i group_id = group_id.to_i if !File.exists?(path) and !File.symlink?(path) if rules =~ /\Ad/ STDERR.puts "Restoring a missing directory: #{path}" STDERR.puts "Probably it was an empty directory. Git goes not track them." `#{MKDIR} -p '#{path}'` # Creating the any parents else known_content_missing = true STDERR.puts "ERROR: Permission is listed but the file is missing: #{path}" next end end s = File.lstat(path) t = s.ftype[0..0].sub('f', '-') # Single character for the file type # But a "-" istead of "f" # Actual, but not neccesarely Desired actual_rules = "#{t}#{numeric2human(s.mode)}" actual_owner_id = s.uid actual_group_id = s.gid unless [actual_rules, actual_owner_id, actual_group_id] == [rules, owner_id, group_id] chmod_argument = human2chmod(rules) # Debug #p chmod_argument #p s.mode ## Verbose puts path puts "Wrong: #{[actual_rules, actual_owner_id, actual_group_id].inspect}" puts "Fixed: #{[rules, owner_id, group_id].inspect}" puts `#{CHOWN} #{owner_id}:#{group_id} '#{path}'` `#{CHMOD} #{chmod_argument} '#{path}'` #puts end end if known_content_missing STDERR.puts "-" * 80 STDERR.puts "Some files that are listed in #{FROM.inspect} are missing in " + "the current directory." STDERR.puts STDERR.puts "Is #{FROM.inspect} outdated?" STDERR.puts "(Try retrograding the current directory to an earlier version)" STDERR.puts STDERR.puts "Or is the current directory incomplete?" STDERR.puts "(Try to recover the current directory)" STDERR.puts "-" * 80 end