6

私は現在、しばらく取り組んできたプロジェクトの Git をセットアップしようとしています。かなり前に Git をセットアップしたことを覚えていますが、さまざまな理由で使用したことはありません。今、私はそれを使用したいのですが、古いインストールに関連していると思われる奇妙な問題が発生しています。

新しく始めるために、Gitインストールが存在しないように新しいUbuntu OSをインストールし、プロジェクト(Grails)をコピーしました。次に、ディレクトリに移動し、次のコマンドを実行します。

git init

git remote add origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git

それから私は走った:

git add .

これは私が以下のエラーを取得する場所です:

fatal: Not a git repository: /home/user/workspace/App_V3/.git/modules/plugins/grails-spring-security-ui

ディレクトリが以下のように、これは私がいるディレクトリとさえ一致しないため、このエラーは奇妙です:

/ホーム/ユーザー/ワークスペース/App_V7/

元は古い OS の App_V3 フォルダーに Git をセットアップしていた可能性があると考えていますが、以下のコードを実行して再初期化したため、まだそのディレクトリを指している理由がわかりません。

rm -rf .git
git init

本当にイライラするので、誰かがこれを手伝ってくれませんか:S

前もって感謝します

4

3 に答える 3

16

サブモジュールを含むリポジトリの移動には問題があります

もともと古いOSのApp_V3フォルダにGitをセットアップしていたのではないかと考えています

これが問題の原因です。

重要なのは、リポジトリ (より具体的には、参照されるサブモジュール) が最初に作成されたときの git のバージョンです。

サブモジュールをvendor/awesome作成するときの git の動作はまったく異なります。

git バージョン < 1.7.8

の内容はvendor/awesome/.gitフォルダーです。他の git チェックアウトと同様に、たとえばチェックアウトのフォルダー構造は次のようになります。

.gitmodules
.git
    ...
vendor/
    awesome
        .git
            config
            HEAD
            index
            packed-refs
            ...

どこにもパスが保存されていないため、この種のリポジトリを移動しても問題ありません。

git バージョン 1.7.8 または 1.7.9

1.7.8 は、サブモジュールの .git フォルダーの場所を移動しました

「git submodule init」を使用して新しいサブモジュール ディレクトリを設定すると、サブモジュールの $GIT_DIR メタ情報ディレクトリがスーパープロジェクトの $GIT_DIR/modules// ディレクトリ内に作成され、gitfile メカニズムを介して参照されます。これは、サブモジュールをツリーに持つスーパープロジェクトと持たないスーパープロジェクトのコミットを、再クローンせずに切り替えることができるようにするためです。

したがってvendor/awesome/.git、フォルダではなく、次の内容のファイルです。

gitdir: /absolute/path/to/main/repo/.git/modules/vendor/awesome

全体的なフォルダー構造は次のとおりです。

.gitmodules
.git
    ...
    modules
        vendor
            awesome
                config
                HEAD
                index
                packed-refs
                ...

vendor/
    awesome
        .git <- a file

の内容は.git/modules/vendor/awesome/config、作業ツリーの場所を指定します。

[core]
   ...
   worktree = /absolute/path/to/main/repo/vendor/awesome

これは非常に素晴らしい変更でしたが、場所の参照に絶対パスが使用されていたため、問題が発生しました。

git バージョン >= 1.7.10

バージョン 1.7.10では、サブモジュールでの絶対パスの使用が変更されました

「git submodule」によって管理される最上位のスーパープロジェクトを格納するディレクトリ全体を別の場所に移動できます。

vendor/awesome/.gitこのバージョンまたはそれ以降のバージョンの git で生成された場合、以下が含まれます。

gitdir: ../../.git/modules/vendor/awesome

の内容は.git/modules/vendor/awesome/config、作業ツリーの場所を指定します。

[core]
   ...
   worktree = ../../../../vendor/awesome

繰り返しになりますが、メイン リポジトリからの相対パスとして、この種のリポジトリを移動しても問題はありません。

リポジトリの移動

古いバージョンまたは新しいバージョンの git を使用しても問題ありません。

残念ながら、1.7.8 または 1.7.9 で作成されたリポジトリで作業し (問題の証拠からそう思われる) 、リポジトリ移動する場合は、2 つの解決策があります。

  1. 再度クローン
  2. サブモジュールの .git ファイルの正しいパスと、対応するワークツリー構成設定
于 2013-07-19T13:40:03.293 に答える
2

すべてのファイルを一度に 1 つずつ新しいフォルダーに移動すると、正常に動作するように見えました :)

助けてくれてありがとう

于 2013-07-19T13:04:35.587 に答える
0

それ以外の

git init
git remote add origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git

あなたが使用する必要があります

git clone origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git .

既存のリポジトリのクローンを作成し、再作成したくないためです。

于 2013-07-19T13:08:30.037 に答える