53

このエラーメッセージに問題があり、修正またはデバッグするための適切な解決策がわかりません。私はさまざまな形でエラーをグーグルで検索しましたが、実際の解決策は提示されていません。権限の問題だと思いますが、どうやってチェックすればいいのか、何をチェックすればいいのかよくわかりません。

私はUbuntu11.10を実行しているサーバーを持っており、基本的に開発マシンからgitリポジトリへの初期コミットを行おうとしています。私はrootとして実行しています。ユーザーとして実行する必要がありますか?

サーバーでのリポジトリの作成:

$ cd /home/username/git
$ mkdir myrepo.git
$ cd myrepo.git/
$ git --bare init

開発マシンでのリポジトリの作成:

Goto rails project directory first
$ git init
$ git add .
$ git commit -m "initial commit"
$ bundle pack
$ git add Gemfile.lock vendor/cache
$ git commit -m "bundle gems"
$ git remote add origin ssh://username@server.com/home/username/git/myrepo.git
$ git push origin master

エラー:

fatal: Unable to create temporary file '/home/username/git/myrepo.git/./objects/pack/tmp_pack_XXXXXX': Permission denied
error: pack-objects died of signal 13
error: failed to push some refs to 'ssh://username@server.com/home/username/git/myrepo.git'

私の.git/configファイル:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    url = ssh://username@server.com/home/username/git/myrepo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

同様の質問: Gitを使用してリモートリポジトリに最初にプッシュするにはどうすればよいですか?

4

9 に答える 9

67

rootが所有するgitリポジトリにファイルがあるようです。プッシュを行うために「ユーザー名」として ssh を実行しているため、ファイルはユーザー名で書き込み可能である必要があります。最も簡単な方法は、おそらくユーザーとしてリポジトリを作成し、同じユーザーを使用してプッシュを行うことです。もう 1 つのオプションは、グループを作成し、そのグループがすべてを書き込み可能にして、ユーザーをそのグループのメンバーにすることです。

于 2012-10-30T20:48:44.997 に答える
26

わかりました、私はそれを理解しました。問題は、myrepo.git と親ディレクトリ git に適切な権限が設定されていなかったことです。

root としてサーバーにログインし、以下を使用しました。

$ chown username /home/username/git

これにより、drwxrwxr-x 4 username root 4096 2012-10-30 15:51 /home/username/git が次のように返されます。

$ ls -ld /home/username/git

次に、git 内に myrepo.git 用の新しいディレクトリを作成します。

$ mkdir myrepo.git
$ ls -ld myrepo.git/
drwxr-xr-x 2 root root 4096 2012-10-30 18:41 myrepo.git/

ただし、ユーザーがルートに設定されているため、以前と同じ方法でユーザー名に変更します。

$ chown username myrepo.git/
$ ls -ld myrepo.git/
drwxr-xr-x 2 username root 4096 2012-10-30 18:41 myrepo.git/

次に、ルートからサインアウトし、ユーザー名としてサーバーにサインインします。

git ディレクトリ内:

$ cd myrepo.git/
$ git --bare init
Initialized empty Git repository in /home/username/git/myrepo.git/

ローカル マシン上:

$ git remote add origin      
ssh://username@server.com/home/username/git/myrepo.git
$ git push origin master

成功!

願わくば、これが将来同じ問題に遭遇する他の人にとって便利になることを願っています!

資力

于 2012-10-31T02:04:04.400 に答える
3

ユーザーがサーバー上のそのディレクトリに書き込む権限を持っていないようです。権限が正しいことを確認してください。ユーザーには、そのディレクトリに対する書き込み権限が必要です。

于 2012-10-30T20:47:20.757 に答える
2

Don Branson のおかげで、問題が解決しました。次回は、サーバー上にリポジトリを構築するときに、このコードを使用する必要があると思います。

root@localhost:~#mkdir foldername
root@localhost:~#cd foldername
root@localhost:~#git init --bare
root@localhost:~#cd ../
root@localhost:~#chown -R usergroup:username foldername

クライアントでは、これを使用します

$ git remote add origin git@servername:/var/git/foldername
$ git push origin master
于 2016-11-19T02:20:34.977 に答える