Gitリポジトリにサブモジュールを追加しようとしていますが、次のエラーが返されます。
remote Origin does not have a url defined in .git/config
これが何であるかについてのアイデアはありますか?グーグルで試してみましたが、あいまいなリンクが1つしか表示されません。
私はこれをやっています:
git submodule add ../extern/Lib1 lib
これでサブモジュールが作成されると思いますlib/Lib1
これは参照を作成するだけであり、更新/初期化する必要があることを認識しています(この部分は明確ではなく、それほど進んでいません。サブモジュールコマンドを学習しているだけです)。
../extern/Lib1
はGitリポジトリを参照していますか?
そうでない場合、GitはGitリポジトリのURLを.gitmodule
に設定する方法を知りません。
また、次のことを試してください。
lib
notはすでに存在します(空でも)サブモジュールに関するいくつかの優れた情報源は次のとおりです。
ここでは絶対パスのみが機能するため、相対パスを比較するための参照が必要であることを意味します。
その参照は、次のようにDirName/NewRepo_withSubmodules/.git/config
ファイルにあるはずの「リモートオリジン」です。
$ cat .git/config
...
[remote "Origin"]
url = /path/to/DirName/NewRepo_withSubmodules/.git
fetch = +refs/heads/*:refs/remotes/Origin/*
...
../DirName/NewRepo_withSubmodules/.git/config
ファイルにそのセクションがある場合は、相対パスを使用して../Extern/Lib1
をサブモジュールとして追加できるはずです。
上記はすべて、gitサブモジュールのマニュアルページの次のセクションから着想を得ています。
<repository>
は、新しいサブモジュールのOriginリポジトリのURLです。
これは絶対URL、または(./
または../
で始まる場合)スーパープロジェクトの相対的な場所Origin
リポジトリ。
したがって、NewRepo_withSubmodules
が作成されたばかりのローカルGitリポジトリである場合(もちろん「オリジン」がない場合)、人工的な「リモートオリジン」を定義する必要があります(オリジンがそれ自体を指している場合でも)。他のサブモジュールリポジトリの相対URLを使用できるようにします。
Git 2.13(2017年第2四半期)では、サブモジュールのデフォルトのオリジンの検出が改善されます。
commit d1b3b81 (25 Feb 2017)by Stefan Beller(stefanbeller
) を参照してください。
(合併 濱野純雄--gitster
- in commit ae900eb 、2017年3月10日)
submodule init
:ローカルパスへのフォールバックについて警告
として 現在文書化されています :
<repository>
は、新しいサブモジュールのOriginリポジトリのURLです。
これは絶対URL、または(./
または../
で始まる場合)スーパープロジェクトのデフォルトのリモートリポジトリに相対的な場所のいずれかです。
(スーパープロジェクト 'foo.git
'のすぐ隣にあるリポジトリ 'bar.git
'を指定するには、代わりに '../foo.git
'を使用する必要があることに注意してください。 './foo.git
'の-相対URLのルールに従うときに予想されるように-Gitでの相対URLの評価は、相対ディレクトリの評価と同じであるため)。デフォルトのリモートは、現在のブランチのリモートトラッキングブランチのリモートです。
そのようなリモート追跡ブランチが存在しない場合、またはHEAD
が切り離されている場合、「Origin
」がデフォルトのリモートであると見なされます。
スーパープロジェクトにデフォルトのリモートが構成されていない場合、スーパープロジェクトはそれ自体の権限のあるアップストリームであり、現在のものです。代わりに、作業ディレクトリが使用されます。
Git 2.20(2018年第4四半期)は、サブモジュールのローカルパスサポートを改善します。
commit e0a862f (16 Oct 2018)by Stefan Beller(stefanbeller
) を参照してください。
(合併 Junio C Hamano --gitster
- in commit 3fc8522 、06 Nov 2018)
submodule helper
:必要に応じて相対URLを絶対URLに変換します「
update_clone
」によって呼び出されるサブモジュールヘルパーgit submodule update
は、必要に応じてサブモジュールのクローンを作成します。
サブモジュールにはアクティブかどうかを示すURLが含まれていたため、相対URLを解決する手順は「submodule init
」手順で実行されました。現在、サブモジュールは、明示的なinitを呼び出さずにアクティブに構成できます。submodule.active
の構成を介して。この方法でアクティブに設定されているサブモジュールを取得しようとすると、
.gitmodules
にあるURLにフォールバックします。これは、スーパープロジェクトに関連している可能性がありますが、まだ解決していません。git clone https://gerrit.googlesource.com/gerrit cd gerrit && grep url .gitmodules url = ../plugins/codemirror-editor ... git config submodule.active . git submodule update fatal: repository '../plugins/codemirror-editor' does not exist fatal: clone of '../plugins/codemirror-editor' into submodule path '/tmp/gerrit/plugins/codemirror-editor' failed Failed to clone 'plugins/codemirror-editor'. Retry scheduled [...] fatal: clone of '../plugins/codemirror-editor' into submodule path '/tmp/gerrit/plugins/codemirror-editor' failed Failed to clone 'plugins/codemirror-editor' a second time, aborting [...]
この問題を解決するには、「
git submodule init
」(init_submodule
関数のサブモジュールヘルパー内)の相対URLを解決する関数を除外し、update_clone
の適切な場所で呼び出します。ヘルパー。
私は同じことを試みていましたが、次のことがうまくいったようです。
私は(Windows上で)持っています:
D:/phd/analyses
/analysis1/ #This is an existing repository
/analysis2/ #another existing repository
/analysis3.tex
/analysis4.tex
...
/analysisN.tex
analysis1.tex ... analysisN.tex
私がまだ取り組んでいないアイデア( 'スタブなど)が含まれ、analysis1/
およびanalysis2/
は私が取り組んでいるものです(したがって、コード、tex、...が含まれています)。他の分析に取り掛かると、それらは独自のフォルダー、つまり独自のリポジトリに移動します。
私がしたことは(分析のgit bashで):
git init
git add *.tex
git remote add self .
git submodule add self:/analysis2/.git analysis2
git submodule add self:/analysis5/.git analysis5
git commit -m "Initial commit"
これはうまくいったようです。
D:/phd/analyses/.git/config
あるべき姿、そして.gitmodules
は次のようになります:
[submodule "analysis2"]
path = analysis2
url = self:analysis2/.git
[submodule "analysis5"]
path = analysis5
url = self:analysis5/.git
よろしく、サイモンナップ
(ここで解決策だけを要約しました。クレジットはVonCに送られます。)
含まれているリポジトリ(たとえばcontaining.git/
)では、git
は、定義されていないOrigin
リモートからの相対パスとして相対パスを解釈します。 containing.git/
ディレクトリに対して相対的なものにしたいので、実行します。
git remote add Origin ..
(なぜそれが..
ではなく.
であるのかわかりません。)
これで、サブモジュールを追加できます。
git submodule add ../extern/Lib1 lib