0

ターミナルを使用して OSX でファイルをプルダウンすると、デフォルトでは編集権限がありません。
どうすればそれを変更できますか?


kirkstrobeck:atheycreek kirkstrobeck$ ls -lad ~ . .git
drwxrwxrwx   8 kirkstrobeck  staff   272 May 24 18:20 .
drwxrwxrwx  16 kirkstrobeck  staff   544 May 25 10:58 .git
drwxr-xr-x+ 92 kirkstrobeck  staff  3128 May 24 15:17 /Users/kirkstrobeck

kirkstrobeck:~ kirkstrobeck$ umask
0022

kirkstrobeck:atheycreek kirkstrobeck$ ls -l
total 8
-rwxrwxrwx  1 kirkstrobeck  staff  2143 Mar  6 14:49 README.md
drwxrwxrwx  4 kirkstrobeck  staff   136 May 23 14:45 www
kirkstrobeck:atheycreek kirkstrobeck$ 

注:CHMODで問題を修正した後、これらの端末コマンドを実行しましたが、間違ったパーマをプルダウンするため、毎回実行します。

4

3 に答える 3

6

編集権限がないと言うとき、正確にはどういう意味ですか?

注:CHMODの問題を修正した後、これらの端末コマンドを実行しました

つまり、出力が役に立たないということです。これらのすべての権限が表示されます。

kirkstrobeck:atheycreek kirkstrobeck$ ls -lad ~ . .git
drwxrwxrwx   8 kirkstrobeck  staff   272 May 24 18:20 .
drwxrwxrwx  16 kirkstrobeck  staff   544 May 25 10:58 .git
drwxr-xr-x+ 92 kirkstrobeck  staff  3128 May 24 15:17 /Users/kirkstrobeck

リストされているすべての編集権限を持っているということです-chmod -R 777 .以前にフォルダーで実行したことがある場合に予想されます。

より関連性の高いアクセス許可は、編集しようとしているファイルとフォルダーのアクセス許可です。コマンドの特定の例、それが生成したエラー、および関連ファイルのアクセス許可-特定の答えが得られますが、それがない場合は、知識に基づいた推測作業があります。

書き込み権限は git の問題ではありません

Git はフォルダーをまったく保存せず、ファイルの実行権限のみを保存します。これは、次のような方法で自分自身に示すことができます。

[andy@work:/tmp/so/original]$ git init
[andy@work:/tmp/so/original]$ touch 0700
[andy@work:/tmp/so/original]$ touch 0600
[andy@work:/tmp/so/original]$ touch 0500
[andy@work:/tmp/so/original]$ touch 0400
[andy@work:/tmp/so/original]$ chmod 0700 0700
[andy@work:/tmp/so/original]$ chmod 0600 0600
[andy@work:/tmp/so/original]$ chmod 0500 0500
[andy@work:/tmp/so/original]$ chmod 0400 0400
[andy@work:/tmp/so/original]$ git add *
[andy@work:/tmp/so/original]$ git commit -va
[master (root-commit) a304e1b] adding files with the named permissions
0 files changed
create mode 100644 0400
create mode 100755 0500
create mode 100644 0600
create mode 100755 0700
[andy@work:/tmp/so/original(master)]$ ls -la 
total 12
drwxr-xr-x 3 andy users 4096 May 28 14:51 .
drwxr-xr-x 3 andy users 4096 May 28 14:48 ..
-r-------- 1 andy users    0 May 28 14:48 0400
-r-x------ 1 andy users    0 May 28 14:48 0500
-rw------- 1 andy users    0 May 28 14:48 0600
-rwx------ 1 andy users    0 May 28 14:48 0700
drwxr-xr-x 8 andy users 4096 May 28 14:51 .git

上記はls -la、数値 (ファイル名) と読み取り、書き込み、実行可能権限 (左側) の両方で示されているファイル許可を ( で) 示しています。0500 と 0700 の 2 つのファイルのみが実行権限を持っています。

[andy@work:/tmp/so/checkout]$ git init
Initialized empty Git repository in /tmp/so/checkout/.git/
[andy@work:/tmp/so/checkout]$ git pull ../original/
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../original
* branch            HEAD       -> FETCH_HEAD
[andy@work:/tmp/so/checkout(master)]$ ls -la 
total 12
drwxr-xr-x 3 andy users 4096 May 28 14:52 .
drwxr-xr-x 4 andy users 4096 May 28 14:52 ..
-rw-r--r-- 1 andy users    0 May 28 14:52 0400
-rwxr-xr-x 1 andy users    0 May 28 14:52 0500
-rw-r--r-- 1 andy users    0 May 28 14:52 0600
-rwxr-xr-x 1 andy users    0 May 28 14:52 0700
drwxr-xr-x 8 andy users 4096 May 28 14:52 .git
[andy@work:/tmp/so/checkout(master)]$

上記は、umask実行可能としてコミットされた場合に実行可能であることに加えて、チェックアウトにデフォルトのファイル許可 ( で指定されたもの) があることを示しています。

上記のことを知っていれば、本当の問題がどこにあるのかに焦点を当てるのに役立ちます。

ファイルのパーミッションを修正する

チェックアウトの権限が間違っている場合は、次のようなコマンドで修正できます。

# make sure all files are owned by you
sudo chmod -R andy:users .
# reset to default permissions
sudo find . -type d -exec chmod 0755 {} \; -or -type f -exec chmod 0644 {} \;

エラーメッセージに記載されているファイルを再確認してください。ファイルのパーミッションは 0644 になり、ファイルが入っているフォルダーは 0755 になりました。

ファイルのアクセス許可を修正したら、準備完了です。

コンテンツを見つけて操作できるようにするには、フォルダーに対する実行権限が必要であることに注意してください。フォルダに実行権限がない場合、フォルダ内でほとんど何をしても権限エラーが発生します。しかし、繰り返しになりますが、git はフォルダーをまったく保存しません。それが問題である場合、それは git 関連ではありません。

リポジトリに変更を加えた場合は、次のコマンドでコミットできます。

git commit -am "Resetting file permissions to their default values"

これは、ファイルの実行可能プロパティへの変更をコミットするだけであり、単なるクリーンアップ手順です。リポジトリをチェックアウトしている他の誰かに権限の問題を引き起こす可能性のあるものは何も修正していません。

ファイルのパーミッションを無視する

チェックアウトに適用するアクセス許可をチェックアウトで完全に無視する場合は、次を使用できます。

git config core.fileMode false

このように、git は、チェックアウトに適用するファイル許可の変更をコミットする変更と見なしませんが、利用可能な情報を考えると、それは関連性が低い可能性があります。

于 2012-05-28T10:04:46.997 に答える
2

git設定に従って動作しumaskます。git が操作する唯一の作業ディレクトリのアクセス許可は、実行ビットです。書き込みができない場合は、umaskセットを非常に制限する必要があります。たとえば、自分自身、グループ、および他のユーザー0277は削除します。wrwx

実行umaskして、現在の設定を確認しumask 022、一般的な設定を設定してください ( =グループやその他の設定022を取り除く)。w

于 2012-05-18T21:18:03.627 に答える
1

core.sharedRepositoryを確認してみてください。これを設定できるため、umask はアクセス許可のデフォルトではありません。

git-config(1) から:

group (または true) の場合、リポジトリはグループ内の複数のユーザー間で共有可能になります (すべてのファイルとオブジェクトがグループ書き込み可能であることを確認してください)。all (または world または everyone) の場合、リポジトリはすべてのユーザーが読み取り可能であり、さらにグループで共有できます。umask (または false) の場合、git は umask(2) によって報告されたパーミッションを使用します。0xxx (0xxx は 8 進数) の場合、リポジトリ内のファイルはこのモード値になります。0xxx は、ユーザーの umask 値をオーバーライドします (他のオプションは、ユーザーの umask 値の要求された部分のみをオーバーライドします)。例: 0660 は、所有者とグループに対してリポジトリを読み取り/書き込み可能にしますが、他のユーザーはアクセスできません (umask が 0022 でない限り、グループと同等です)。0640 は、グループで読み取り可能ですが、グループで書き込み可能ではないリポジトリです。git-init(1) を参照してください。デフォルトでは偽です。

そう

git config core.sharedRepository すべて

すべての人にアクセスを許可します。

于 2012-05-30T15:47:07.133 に答える