2017-02-14 11 views
0

これは他の場所で尋ねられていて、私はそれを逃してしまった場合はお詫び申し上げます。私は何をしようとしているのかに近い多くの質問と答えを見つけましたが、正確には合っていません。ローカルのリポジトリをリモートの単一ファイルに移動

ローカルのgitリポジトリにローカルファイルとプロジェクトがあります。私は自分の仕事を保護し、追跡する方法として数ヶ月前にリポジトリを作成しました。私たちの会社の残りの部分はSVNを使用しているので、ここでgitを使うのは初めてです。私はそれをLinuxサーバーのホームディレクトリに設定しました。このレポには、過去数ヶ月にわたり私の仕事に及ぶ多くのコミット、ブランチ、タグが含まれています。

私の会社のLinuxサーバー(ホームディレクトリではありません)内のよりアクセスしやすい場所にそのリポジトリを移動したいので、他の人がリポジトリ全体(すべてのタグ、支店、履歴などを含む)彼らが合っているように見える。

私はファイル構造全体をコピーまたは移動することを考えましたが、1つのファイル、つまりmyRepo.gitにしたいと考えています。

誰かがこのリポジトリをクローンして 'gitk --all'を実行したときに、すべてのブランチやタグなどが表示されるようなmyRepo.gitにすべての情報が含まれているようにするにはどうすればいいですか?

ありがとうございました。

+0

_ "私はそれを1つのファイル、つまりmyRepo.git" _なぜですか? –

+0

私はそれが単一のファイルであることに結婚していません。私は混乱していた。 myRepo.gitは、拡張のために単一のファイルのように見えました。私はそれを「cd」して、それがディレクトリであることを知った。私はまだgitとLinuxの両方について学んでいます - 私は推測する方法がまだあります。 – Scottlysan

答えて

1

git clone --bareあなたのレポは他の人がアクセスできる場所です。

最も基本的なリモートGitリポジトリは、裸のクローンだけです。裸のクローンは、チェックアウトがないことを意味し、それは.gitディレクトリの内容に過ぎません。チェックアウトをすると、そのチェックアウトを自分のgit作業ディレクトリとして使用して変更を加えようとする可能性があり、リポジトリに変更を加える他の人と混乱することになります。

例えば、foo/に新しいリポジトリを作成してファイルをコミットします。

$ git init foo 
Reinitialized existing Git repository in /Users/schwern/tmp/foo/.git/ 
$ rm -rf foo 
$ git init foo 
Initialized empty Git repository in /Users/schwern/tmp/foo/.git/ 
$ cd foo 
$ touch this 
$ git add this 
$ git ci -m 'First commit' 
[master (root-commit) 1a0bddf] First commit 
1 file changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 this 

それから私は(クローニングがネットワーク上で発生する必要はありません)bar/にそれの裸のクローンを作成します。

$ git clone --bare foo bar 
$ ls 
HEAD config description hooks info objects packed-refs refs 

チェックアウトの代わりに、.gitディレクトリの内容を持っています。

ここからクローンを作成できます。ローカルファイルシステム上のクローニングだ

$ git clone bar baz 
Cloning into 'baz'... 
done. 
$ cd baz/ 
$ git log 
commit 1a0bddf415f48d71fa3aacc79c07c233d91ed4a9 (HEAD -> master, origin/master, origin/HEAD) 
Author: Michael G. Schwern <[email protected]> 
Date: Tue Feb 14 12:01:13 2017 -0800 

    First commit 

。もちろん、Gitはネットワーク上でクローンを作成します。通常、sshまたはhttpsを使用します。 git clone [email protected]/pathはにsshと入力してuserと入力し、pathにコピーしてください。

他の人には、devサーバーやSVNサーバーを持っているホストと同じようにsshアクセス権がある場所にリポジトリを置くことができます。


これはGitリポジトリを共有するための最も素朴な方法です。そこには、Webアクセスとより多くのプロトコルを提供する洗練されたGitサーバがたくさんあります。非常にまばらなものすべてGitWebからGitlabまで、Githubクローンをローカルで無料でホストすることができます。

Pro Git's chapter on Git Serversで詳しく読むことができます。

0

完全に機能するgit repoは、ではなく、という単一のファイルであり、そのようにする方法はありません。つまり、あなたの作業レポをコピーすることが最善のことではありません。

リポジトリを完全に機能させることが重要である場合(つまり、同僚が参加できるかどうか気にしない場合)は、バンドルファイルを作成できます。

git bundle create /path/to/my/repo.bundle --all 

あなたの同僚は、このことからクローンを作成しないリモートとして追加し、引っ張ったり、そこからフェッチ...しかし、彼らはそれにプッシュすることはできません(どちらもすることができますすることができ、あなたが持っているだろう、それに追加しますそれを再現する)。

クローン対象の共有リポジトリは、通常は裸のレポである必要があります。これは、作業リポジトリの.gitディレクトリのコピーとほぼ同じです。既存のレポがで/パス/に/私/レポであれば、あなたは私が代わりに--bare--mirrorを使用

cd /path/to/shared 
git clone --mirror /path/to/my/repo 

注意を言うことによって、共有/レポ/に/に/パス適した裸のレポを作成することができます。これは、後で元のものとして扱われることを意図している場合に、参照がどのようにコピーされ、よりうまくいくかに関係します。

まだこの時点で/ path/to/my/repoはまだ上流とみなされています。それを修正するには

cd /path/to/shared/repo 
git remote remove origin 
cd /path/to/my/repo 
git remote add origin /path/to/shared/repo 
+0

迅速な対応をありがとうございます。私は "git remote remove origin"を行うことができません。次の「エラー:不明なサブコマンド:削除」というメッセージが表示されます。私も "rm"と "-d"を試しました。私はこれを行うための正しい方法を見回します - 私は考えを得る。 – Scottlysan

+0

うーん... gitの古いバージョンかもしれないが、 'git remote rm origin 'が動作すると期待していただろう。なぜそうなるのか分かりません。 –

関連する問題