Windowsのローカルファイルシステム全体のGITクローンリポジトリ


200

GITに関しては、私は完全なNoobです。ここ数日、私は最初の一歩を踏み出したばかりです。私は自分のラップトップでリポジトリをセットアップし、SVNプロジェクトからTrunkをプルダウンしました(ブランチにいくつかの問題があり、機能していません)がすべて問題ないようです。

ラップトップからメインデスクトップにプルまたはプッシュできるようになりました。ノートパソコンである理由は、私が1日2時間旅行し、いくつかの良い仕事をすることができるので、電車の中で便利です。しかし、自宅の私のメインマシンは開発に最適です。家に帰ったら、ラップトップからメインコンピュータにプッシュ/プルできるようにしたいのです。これを行う最も簡単な方法は、コードフォルダーをLAN経由で共有し、次のようにすることだと思いました。

git clone file://192.168.10.51/code

残念ながら、これは私にはうまくいかないようです:

だから私はgit bash cmdを開いて上記のコマンドを入力します、私はC:\ code(両方のマシンの共有フォルダ)にいます:これは私が返すものです:

Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

最も簡単な方法で2つのマシン間でリポジトリを共有するにはどうすればよいですか。

公式のストレージポイントになる他の場所と、他の開発者やCIサーバーなどがそこから取得される場所があります。これは、2つのマシン間で同じリポジトリで作業できるようにするためです。

セバスチャンの提案に従って、私は以下を得ます:

C:\code>git clone --no-hardlinks file://192.168.10.51/code
Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

**編集-回答**

助けてくれたすべてに感謝します。ドライブのマッピングを試しましたが、うまくいきましたので、マッピングせずに戻って再試行すると思いました。最終結果は:

git clone file://\\\\192.168.0.51\code

これはうまくいきました。

ありがとう


ファイル:// C:\ fooの\ bar.txtで、ファイルが一方//192.168.10.51/codeは、ファイルを指す平均有効なURIがないことである
グレゴリーPakosz

次に、そのような参照を使用してリモートマシンをどのように指すことができますか?
Jon

おそらくネットワークドライブをマップする必要があります。
ジョシュリー

私のために働いた-これはウィンドウに固有であり、ウィンドウのgit bashからは機能しないことに注意してください-cmdまたはpowershellを使用する必要があります
Dave Rael

cmdでも試してみましたが、うまくいきません。また、「git clone file:// \\\\ 192.168.0.51 \ code」の「コード」とはどういう意味ですか?「C:/ UniserverZ / www / sampleProject /」に置き換えても動作しませんでした。これはgitリポジトリではないと言っています
boi_echos

回答:


177

UNCパスをファイルプロトコルに適用することにより、リモートのURLを指定できます。これには、4つのスラッシュを使用する必要があります。

git clone file:////<host>/<share>/<path>

たとえば、メインマシンにIP 192.168.10.51とコンピューター名mainがあり、それcode自体がgitリポジトリであるという名前の共有がある場合、次のコマンドはどちらも同じように機能します。

git clone file:////main/code
git clone file:////192.168.10.51/code

Gitリポジトリがサブディレクトリにある場合は、パスを追加するだけです。

git clone file:////main/code/project-repository
git clone file:////192.168.10.51/code/project-repository

2
そのスキームで認証する方法(つまり、ユーザー名/パスワード)はありますか?
2010年

1
@majgis私はほぼWindowsのみを使用しているため、私のソリューションはWindowsで動作します。
2011

1
うん、これはWindowsでそれを行うための最良の方法です。
Nicholas DiPiazza

3
protocol://// user:password @ host:port / path表記を使用することもできます。
pistache

1
@OderWat例外ですが、別のコンピュータにアクセスしようとしたときにlocalhostを使用してもまったく問題がありません。これが問題でした。アクセスしたい場合は、ローカルファイルシステムにローカルに存在するリポジトリを、すなわち、あなただけ...ファイルプロトコルを使用せずにローカルパスを使用することができます
突く

125
$ git clone --no-hardlinks /path/to/repo

上記のコマンドは、gitリポジトリのあるディレクトリにPOSIXパス表記を使用しています。Windowsの場合(ディレクトリにC:/path/to/repo.gitディレクトリが含まれます):

C:\some\dir\> git clone --local file:///C:/path/to/repo my_project

リポジトリはにクローンされC:\some\dir\my_projectます。file:///一部を省略すると、--localオプションが暗黙指定されます。


7
これは、スペースを含むファイルパスの場合に機能しました。git clone -l file:// "C:\ SOME PATH \ WITH SPACES" my_project
Sebastian Patten

1
大変助かります。これは私のWindows 7マシンで動作します。<git bashコマンドプロンプトから>のようなもの:git clone file:/// C:/ Users / username / repsitoryName
Forhad

おそらく後でリモートを設定する必要があります。それ以外の場合は、他のローカルを起点としてポイントするため、エラーが発生しやすくなります。git remote -v; git remote rm originを使用します。git add origin <repo-address>(元のローカルリポジトリでgit remote -vを実行した後にコピーできます)
Hanan

これは正しいです。file:////のようなURLフォームを使用する必要はありません。ディレクトリを複製するだけです。
Peter N. Steinmetz 2014年

14

ホスト名での答えは私にはうまくいきませんでしたが、これはうまくいきました:

git clone file:////home/git/repositories/MyProject.git/


1
「file:」の後にスラッシュが多すぎるようです。私の場合、マジックナンバーは3スラッシュでした
マークFゲラ

変だ。4つのスラッシュで致命的なエラーが発生しました。それは(私にとって)3つでしか機能しませんでした。
Big McLargeHuge 14

4
機能する構文を理解するための私のトリックは、フォルダー内にtxtファイルを作成し、それをドラッグしてブラウザーで開くことです。ファイルの正しいURLが表示されます。
AnneTheAgile 2014年

7

私はfile://を使用してこれを行うことに成功しましたが、絶対パスを示すためにスラッシュを1つ追加しました。

git clone file:///cygdrive/c/path/to/repository/

私の場合、Cygwin for WindowsでGitを使用しています。これは、パスの/ cygdrive / cの部分が原因です。パスを少し調整すると、どのgitインストールでも機能するはずです。

リモコンの追加は同じように機能します

git remote add remotename file:///cygdrive/c/path/to/repository/

6

共有をネットワークドライブとしてマッピングしてから、

git clone Z:\

主に単なる推測です。私はいつもsshを使ってこれを行っています。もちろん、その提案に従うと、ラップトップにプッシュ/プルするたびに、そのドライブをマッピングする必要があります。sshをどのようにしてWindowsで動作させるかはわかりませんが、これを頻繁に実行する場合は、調査する価値があります。


@Carlos:ドライブのcd他のディレクトリにZ:移動していない場合にのみ機能すると思います。ちゃんと覚えたら; 私はかなり長い間Windowsユーザーではありませんでした。また、gitドライブ文字の解釈が標準のWindows規則とは異なる場合もあります。「Z:」を試しましたか?
2010年

errr ...「 `Z:\`を試しましたか?」と表示されているはずです。まあ、コードモードが有効になるように正しくエスケープする場合を除いて.. #nurrrr ..とにかくそうではないでしょう。
2010年

3

それが私のgitバージョン(1.7.2)が原因かどうかはわかりませんが、マシン名とIPオプションを使用した上記のアプローチではうまくいきませんでした。重要かもしれないし、重要でないかもしれない追加の詳細は、リポジトリが、私が初期化して別のマシンからプッシュしたベアリポジトリであったことです。

上記のように、次のようなコマンドでproject1のクローンを作成しようとしました。

$ git clone file:////<IP_ADDRESS>/home/user/git/project1
Cloning into project1...
fatal: '//<IP_ADDRESS>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

そして

$ git clone file:////<MACHINE_NAME>/home/user/git/project1
Cloning into project1...
fatal: '//<MACHINE_NAME>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

私にとってうまくいったのはもっと簡単なことでした:

$ git clone ../git/project1
Cloning into project1...
done.

注-クローン元のリポジトリが裸であったとしても、これにより、(gitリポジトリの内部とは対照的に)私が望んでいた実際のコード/イメージ/リソースファイルをすべて含む「通常の」クローンが作成されました。


1

絶対パスまたは相対パスを入力します。

たとえば、以下の最初の例では絶対パスを使用しています。

(これは、サブフォルダーとしてリポジトリとバックアップを含むフォルダー内からです。バックアップフォルダーに既に何かが含まれている場合、バックアップフォルダーは変更されないことに注意してください。存在しない場合、新しいフォルダーが作成されます)

~/git$ git clone --no-hardlinks ~/git/git_test1/   ~/git/bkp_repos/

以下は相対パスを使用しています:

~/git$ git clone --no-hardlinks git_test1/   bkp_repos2/

0

UNCパスはGit 2.21(2019年2月、以下を参照)以降サポートされていますが、Git 2.24(2019年第4四半期)では、

git clone file://192.168.10.51/code

これ以上file:////xxx、 ' file://'はUNCパス共有を参照するには十分ではありません。
UNCを使用したGit Fetchエラー」を参照してください。


2016年とGit for Windowsにパッケージ化されたMingW-64 以降、UNCパスがサポートされることに注意してください。 (「msys、msys2、およびMinGW-64は互いにどのように関連していますか?」を参照してください。)git.exe

Git 2.21(2019年2月)では、このサポートはmsys2シェルでも拡張されてます(UNCパスを引用符で囲んでいます)。

Johannes Schindelin()によるcommit 9e9da23commit 5440df4(2019年1月17日)を参照してください。協力者キムギベル(Junio C Hamanoによって統合--dscho
Jeff-G
gitsterf5dd919コミットし、2019年2月5日)を

Git 2.21より前のバージョンでは、Gitのスポーン方法に問題があるため git-upload-pack、バックスラッシュを含むパスを渡すときに問題が発生します。Gitは、Git for Windowsで異なる引用セマンティクスを持つシェルを介してコマンドラインを強制します(MSYS2になります)。プログラムなど、通常のWin32実行可能ファイルよりもgit.exe

症状は、フォームのUNCパス内の2つのバックスラッシュのうちの最初のものです。 \\myserver\folder\repository.git削除されることです。

これは現在緩和されています:

mingw:の特別な場合の引数 sh

MSYS2ランタイムは、コマンドラインワイルドカードの展開とクォート解除をエミュレートするために最善を尽くします。これは、Unixシステム上の呼び出し元のUnixシェルによって実行されます。

これらのUnixシェルの引用規則は、WindowsのcmdやPowershellに適用される引用規則とは異なり、他のプロセスを起動するときにコマンドラインパラメータを適切に引用するのは少し面倒です。

特に、次のgit.exeサブプロセスに引数を渡しますワイルドカードとして解釈されることを意図しいないそれらにバックスラッシュが含まれている場合、それらはエスケープ文字として解釈されません(Windowsパスを渡す場合など)。

注:これは、MSYS2実行可能ファイルを呼び出す場合のみの問題であり、git.exeなどのMINGW実行可能ファイルを呼び出す場合は問題ではありません。ただし、MSYS2実行可能ファイルを頻繁に呼び出します。use_shell、child_process構造体にフラグをです。

.exe実行されるファイルがMSYS2プログラムかMINGWプログラムかを判別するための洗練された方法はありません。
しかし、シェルを介してコマンドラインを渡すユースケースは非常に普及しているため、少なくとも実行時にこの問題を回避する必要がありますsh.exeます。

醜い、ハードコーディングされたテストを紹介しましょうargv[0]"sh "であるかどうか、およびMSYS2 Bashを参照しているかどうか通常とは異なる方法で引数を引用する必要があるかどうかを判断します。

それでもまだ問題は完全には修正されていませんが、少なくともそれは何かです。

ちなみに、これgit clone \\server\repoは、git-upload-packプロセスへのパスを渡すときにバックスラッシュの不適切な処理が原因で失敗する問題も修正します。

さらに、空白やバックスラッシュだけでなく、中括弧も引用するように注意する必要があります。
エイリアスはMSYS2 Bashを頻繁に通過し、エイリアスHEAD@{yesterday}はなどのパラメーターを頻繁に取得するため、これは非常に重要です。

見る t/t5580-clone-push-unc.sh


0

クローン後、私にとってプッシュは機能しませんでした。

解決策:リポジトリのクローンが作成されている場所で、.gitフォルダーと構成ファイルを開きます。

リモートの起点URLの設定値:

[remote "origin"]
    url = file:///C:/Documentation/git_server/kurmisoftware
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.