git push fatal failed


24

コードブランチのディレクトリ全体をどういうわけか削除しました。新しいものをクローンしました。プッシュ以外は問題なく動作しました。

~/workspace/wtf (mybranch)]$ git push origin  mybranch 
error: Cannot access URL [my url], return code 22
fatal: git-http-push failed 

ただし、git pullは機能します。どうすれば修正できますか?

git  push 

1
、このマニュアルをお読みくださいここには約ポイントに気づきますhttp.receivepack
hhh

回答:


33

新鮮なコピーにsshではなくhttpsを使用するという間違いを犯しました。それ以来、変更とコミットを行いましたが、明白な理由でプッシュできませんでした。

回復するために、.git / configのセクション[remote "origin"]を単純に変更しました。

url = https://github.com/AIFDR/riab_core.git

url = git@github.com:AIFDR / riab_core.git

その後、もう一度押すことができました。


2
別のプロトコルに移動する必要はありません。httpをプッシュする場合は、以下の回答をお読みください。
バジルA

1
バジルに同意します。これは不要であり、ファイアウォールなどを介したアクセスが制限されている一部の企業環境では不可能です。

...問題はにありますgit-http-push failed、私はopがhttpまたはhttps -1で設定しようとしているのを見ます。
hhh

14

gitのみを使用したHTTPプッシュの高速化-webDAVは必要ありません

git 1.6.6以降の新しい「smart-http」サポート。新しい方法では、個別のファイルとしてではなく、パック全体を一度に送信できます。

また、gitwebを使用して、同じ場所で閲覧可能なURLを提供することもできます。

注:アクセスはApacheによって制御されるため、各リポジトリのセットアップに認証要件(htaccessまたはldapなど)を追加できます。

この回答は、リモートサーバーを所有しており、httpサポートを追加/修正することを前提としています。

最初:apacheログを確認します。apacheがgit-http-backed cgiスクリプトを実行しようとしたときに、アクセス許可が拒否された/エラーを特定できない可能性があります。

HTTPサポートをgitに追加する

新しいgit_support.confファイルを作成し、Apacheに含めるだけです(httpd.confにincludeステートメントを追加します)

#
#  Basic setup for git-http-backend
#

SetEnv GIT_PROJECT_ROOT /opt/git_repos
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER  #IMportant !!! This could be your problem if missing

<Directory /opt/git>  # both http_backend and gitweb should be somewhere under here
        AllowOverride None
        Options +ExecCGI -Includes  #Important! Lets apache execute the script!
        Order allow,deny
        Allow from all
</Directory>

# This pattern matches git operations and passes them to http-backend
ScriptAliasMatch \
        "(?x)^/git/(.*/(HEAD | \
                        info/refs | \
                        objects/(info/[^/]+ | \
                                 [0-9a-f]{2}/[0-9a-f]{38} | \
                                 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                        git-(upload|receive)-pack))$" \
        /opt/git/libexec/git-core/git-http-backend/$1

# Anything not matched above goes to displayable gitweb interface
ScriptAlias /git /opt/git/cgi-bin/gitweb.cgi/

その結果、プッシュ/プルが可能になります。

me@machine /tmp/eddies $ git pull
Already up-to-date.

me@machine /tmp/eddies $ touch changedFile

me@machine /tmp/eddies $ git add .

me@machine /tmp/eddies $ git commit -am"commiting change"
[master ca7f6ed] commiting change
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 changedFile

me@machine /tmp/eddies $ git push origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 239 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To http://mysecretdomain.com/git/eddies
   0f626a9..ca7f6ed  master -> master

また、これらの変更をオンラインで閲覧できます。 gitwebは閲覧可能なインターフェースを提供します

ソース:http : //repo.or.cz/w/alt-git.git?a=blob_plain ; f=gitweb / README


ユーザーに関する重要な行である7行目を実行すると、"SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."なぜですか?
hhh

値は空だと思うので、setenvは引数を0しか見ていない。Apacheはリダイレクトルールを使用するため、REMOTE_USERが空である可能性があるため、REDIRECT_RMEOTE_USERを取得します。RMEOTE_USERが既に定義されている場合(またはREDIRECTユーザーが空の場合)、割り当てをオプションにすることができます。httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif

7

http上で「git push」を有効にするには、WebサーバーでWebDAVを有効にする必要があります。Apache Webserverでこれを行うには、単に構成ファイルを編集します。

vim /etc/httpd/conf/httpd.conf

次に、次で始まる行を検索します。

<Directory "/var/www/html">

その直後に次の行を追加します。

Dav On

httpd.confにも次の行がコメント解除されていることを確認してください。

LoadModule dav_fs_module modules/mod_dav_fs.so

その後、準備が整いました。以下を使用してApache Webserverを再起動します。

service httpd restart

また、サーバー上のすべてのgitリポジトリファイルを、pache:apacheユーザーおよびグループが以下を使用して書き込み可能にするようにしてください。

chown -R apache:apache /var/www/html/your_git_repository

それ以外の場合、「git push」を実行すると、適切な権限の設定に失敗すると「PUTエラー:curl result = 22、HTTPコード= 403」が発生します。

クライアントマシンから「git push」を実行するだけで、すべてが機能するはずです。


注、ユーザーがこのハードルを乗り越えるが、apcaheログにエラーが表示された場合についての受信パック stackoverflow.com/questions/792611/...

2
これは機能しますが、DAVは必須ではなく、実際にはsmart-httpよりもはるかに遅く実行されます。

4

HTTPを使用してクローンを作成したリポジトリをプッシュすることはできません。URLをa ssh://またはgit://type URL に更新する必要があります。


同じクローンコマンドを使用しました。私が間違って削除をしたまでは....前に働いていた

何を持っていgit remote -vますか?
マイティラバーダック

完全に真実ではありません。DAVが有効になっている場合、リポジトリにプッシュバックできます。

6
これは間違っています。1.6.6以降のGitは、Apacheとgit-http-backendを使用したスマートHTTPプッシュおよびプルをサポートしています。

3

.git / configファイルの次のセクションを編集します。

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.repository.url/repo.git

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@git.repository.url/repo.git

それから試してくださいgit push origin master

必要に応じて、他のリポジトリURLの構成ファイルで認証の詳細を編集し、必要なブランチにプッシュします。


注:この方法を使用して問題を解決しましたが、パスワードを構成ファイルに保存するのは間違っているように思えたので、それを中断し(プロンプトが表示されることを期待して)、そのまま使用することができました。
クリス

git remote set-url origin ...同様に動作します。
マクシミリアンヒルズ

1

git-http-backend、ldap authentication configを使用したプッシュ操作でも同じ問題が発生しました。
最後に、私は解決策を見つけて、このserverfault質問でそれを説明しました

同様の問題を抱えている人を助けるかもしれません。


0

すばらしいです

私は他のエラーがありましたが、うまくいきます!

私が説明しよう:

  • apache2とwebdavでUbuntuサーバーをインストールする
  • 詳細については、http://www.mabishu.com/blog/2011/02/09/setup-a-remote-git-repository-using-http-with-push-support-and-digest-auth/をご覧ください
  • クライアントでクローン->パーフェクト!
  • 何かを変更....
  • プッシュ->失敗
  • サーバーの所有者を変更する
  • エラー「PUTエラー:curl result = 22、HTTP code = 403」がなくなりました。
  • 今はgit-http-pushが失敗したとだけ言う
  • サーバーログ: Could not LOCK /path/to/www/gitproject/refs/heads/master due to a failed precondition (e.g. other locks)
  • 私はuser1520409ist works からの回答を使用しました。

しかし、プッシュメッセージのテキストからパスワードを非表示にする方法は?


-1

これは、間違ったパスワードを入力した場合にも発生する可能性があります。


私はそれを見たことがありません:私は常にfatal: Authentication failed最初に取得します
Rup
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.