web-dev-qa-db-ja.com

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

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

ラップトップからメインデスクトップにプルまたはプッシュできるようになりたい。ラップトップである理由は、電車で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

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

ありがとう

198
Jon

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

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

たとえば、メインマシンにIP192.168.10.51とコンピューター名mainがあり、それ自体がgitリポジトリであるcodeという名前の共有がある場合、次のコマンドの両方が同等に機能するはずです。

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
176
poke
$ 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オプションが暗黙的に指定されます。

122
jfs

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

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

14
Talaat Safwat

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

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

私の場合、Windows用のCygwinでGitを使用していますが、これは私のパスの/ cygdrive/cの部分のためにわかります。パスを微調整することで、どのgitインストールでも動作するはずです。

リモートの追加も同じように機能します

git remote add remotename file:///cygdrive/c/path/to/repository/
7
Mark F Guerra

おそらく、共有をネットワークドライブとしてマップしてから

git clone Z:\

大部分は単なる推測です。私は常にsshを使用してこのようなことをしています。もちろん、その提案に従うと、ラップトップとの間でプッシュ/プルを行うたびに、そのドライブをマップする必要があります。 sshをWindowsで動作するようにリグする方法がわかりませんが、これをたくさん行うつもりなら、調査する価値があるかもしれません。

6
intuited

私の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

did私にとっては何がより簡単だったか:

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

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

3
bargar

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

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

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

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

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

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

2016年および MingW-64git.exeGit for Windows でパッケージ化されているため、UNCパスがサポートされています。
(「 msys、msys2、およびMinGW-64の相互関係は? 」を参照)

また、Git 2.21(2019年2月)では、このサポートは msys2 Shell(UNCパスを引用符で囲む)でも拡張されます。

commit 9e9da2commit 5440df4 (2019年1月17日)by Johannes Schindelin(dscho を参照してください。
サポート: Kim Gybels(Jeff-G
C浜野順夫-gitster- in commit f5dd919 、05 Feb 2019)

Git 2.21より前では、git-upload-packを生成するGitのメソッドに癖があるため、バックスラッシュを含むパスを渡すと問題が発生します。Gitは、シェルを介してコマンドラインを強制します。 MSYS2プログラム)、git.exeなどの通常のWin32実行可能ファイル自体。

症状は、\\myserver\folder\repository.git形式のUNCパスの2つのバックスラッシュの最初がstripped offであることです。

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

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

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

これらのUnixシェルのクォートルールは、WindowsのcmdおよびPowershellに適用されるクォートルールとは異なり、他のプロセスを生成するときにコマンドラインパラメーターを適切にクォートするのが少し面倒です。

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

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

実行される.exeファイルがMSYS2プログラムであるかMINGWファイルであるかを判別するエレガントな方法はありません。
ただし、シェルを介してコマンドラインを渡すユースケースは非常に一般的であるため、少なくともsh.exeを実行する場合は、この問題を回避する必要があります。

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

それでも問題を完全に解決することはできませんが、少なくともそれは何かです。

ちなみに、これにより、git clone \\server\repoプロセスにパスを渡すときにバックスラッシュが正しく処理されないためにgit-upload-packが失敗する問題も修正されます。

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

t/t5580-clone-Push-unc.sh を参照してください

0
VonC