3

私はSVNを何年も使用していますが、Gitを初めてテストしたいと思います。

以前の資格情報(で作成)を保持するためにHTTPプロトコルを使用しようとしましたhtpasswd

私は自分のサーバーで次の手順に従いました。

$ aptitude install git-core apache2
$ mkdir -p /var/git/repositories
$ htpasswd -c /var/git/passwd my_account
$ cat > /etc/apache2/sites-available/git << EOF
<VirtualHost *:80>
    ServerName git.mydomain.com

    SetEnv GIT_PROJECT_ROOT /var/git/repositories
    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

    ScriptAlias / /usr/lib/git-core/git-http-backend/

    DocumentRoot /var/git/repositories

    <Directory /var/git/repositories>
        Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    <Location />
        AuthType Basic
        AuthName "Git Access"
        AuthUserFile /var/git/passwd
        Require valid-user
    </Location>
</VirtualHost>
EOF

$ a2ensite git
$ service apache2 reload

$ cd /var/git/repositories
$ git init --bare my_project.git
$ git update-server-info

私のクライアントでは、これを行います:

$ git clone http://git.mydomain.com/my_project.git
$ cd my_project
$ cat > test-file.txt << EOF
This is a test
EOF
$ git add test-file.txt
$ git commit -m "My first commit"

今のところすべてが大丈夫のようです。

リモートリポジトリでコンテンツを更新したいので、更新しますgit pullが、これは機能しません。Gitは次のメッセージを返します:

構成で、リモートからのref'master'とマージするように指定されていますが、そのようなrefはフェッチされていません。

とにかく、私は自分のコードに一人でいます。後で修正しようと思います。サーバーにプッシュしてみましょう。

だから私はしますgit push

共通の参照はなく、指定もありません。何もしない。
おそらく、「master」などのブランチを指定する必要があります。
すべてが最新です

わかりました... 「何もしません」「すべてが最新です」

少し確認した後、次のコマンドを見つけて実行します。git push origin master 今回は次のメッセージが表示されます。

エラー:解凍に失敗しました:unpack-objects異常終了http://git.mydomain.com/my_project.git
へ ![リモート拒否]マスター->マスター(該当なし(アンパッカーエラー)) エラー:一部の参照を「http://git.mydomain.com/my_project.git」にプッシュできませんでした

私はウェブ上の多くのチュートリアルに従おうとしました。

私の設定は単純だと思うので、なぜそれが機能しないのか理解できません。

私を助けてくれる人に感謝します。

編集 :

http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.htmlに従って、最初からやり直しました。

gitwebは必要ありません。GitクライアントでHTTPプロトコルを使用したいだけです。

だから私の仮想ホストは:

<VirtualHost *:80>
    ServerName git.mydomain.com

    SetEnv GIT_PROJECT_ROOT /var/git/repositories
    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

    ScriptAlias / /usr/lib/git-core/git-http-backend/

    DocumentRoot /var/git/repositories

    <Location />
        AuthType Basic
        AuthName "Git Access"
        AuthUserFile /var/git/passwd
        Require valid-user
    </Location>

</VirtualHost>

まったく同じエラーが発生します。

git pull戻り値 :

構成で、リモートからのref'master'とマージするように指定されていますが、そのようなrefはフェッチされていません。

そしてgit push origin master戻ります:

エラー:解凍に失敗しました:unpack-objects異常終了http://git.mydomain.com/my_project.gitへ ![リモート拒否]マスター->マスター(該当なし(アンパッカーエラー))エラー:一部の参照を「http://git.mydomain.com/my_project.git」にプッシュできませんでした

4

1 に答える 1

0

これが答えかどうかはわかりませんが、cgi をインストールしていなかったため、同様の問題が発生したことを覚えています。したがって、依存関係を root または sudo としてインストールします。(私はこの提案で死んだ馬を打ち負かしていることを知っています。)debianスタックの例:

#!/bin/sh

apt-get install git-core
apt-get install curl-ssl
a2enmod cgi
a2enmod alias
a2enmod env

apache cgi モジュールが欠落している可能性があります。理論的には、apache cfg ファイルは問題ないように見えますが、サーバーが異常なことをしていないことを確認するためだけに、ルートを使用する代わりに、これらのスクリプト エイリアスを実際の名前に変更しようとします。しかし、私はあなたと一緒です。Smart GIT HTTP を ubuntu サーバーで動作させようとしています。Debian で実行しましたが、以前の Apache Rewrite Rules は URL をリダイレクトしていました。

私も使いませんgit init --bare。少なくとも README ファイルを作成して、git で HEAD を作成できるようにします。次にgit init、GIT が情報を保持する .git/ フォルダーを置くことを標準化したため、使用します。git init --bare はこれを行いません。git log を使用して変更を表示します。たとえば、次のようにします。

#!/bin/sh

echo >> '' README
git init
git add .
git commit
git log --oneline --decorate --graph
于 2012-06-30T05:19:58.720 に答える