web-dev-qa-db-ja.com

gitリポジトリをオフラインマシンにコピーし、メモリースティックを介してプッシュ/プルします

リポジトリにアクセスできないオフラインマシンで作業する必要があります。今では、Gitの使用を完全に見逃したくありません。

質問:

  • メモリースティックを介してリポジトリをオフラインマシンにコピーする最良の方法は何ですか?
  • ファイルシステムを介してパッチをコピーする方法はありますか?

編集:私は、私のためにコピーを行う管理者にメモリースティックを渡す必要がある、つまり、ユーザーと一緒にスティックをマウントできないことを述べるべきでした。

16
Beginner

完全なGitリポジトリをコピーするには、フォルダ.git;をコピーする必要があります。それはすべてを含んでいます。 Gitは安全なファイル名を使用し、リポジトリ内のタイムスタンプを無視するため、このデータは通常のファイルシステムの癖から安全です。

ターゲットマシンでフォルダを作成し、その中の.gitフォルダをコピーします。これで、git checkout <branch>が作業コピーを取得します。

レポ全体ではなくパッチを前後に移動したい場合は、git format-patch <branch>がパッチを作成します。このコマンドは、リモートリポジトリを更新するために必要なすべてのパッチを作成します(つまり、出力にはまだプッシュされていないすべてのものが含まれます)。コミットID(=このコミットで開始)または範囲を指定することもできます。

それらを適用するには、リモートリポジトリでgit am < 0001....を使用します。

関連:

12
Aaron Digulla

リポジトリをメモリースティックにコピーするには、git cloneを使用してから、git pullを使用して更新します。

たとえば、メモリースティックを取り付けたオンラインコンピュータで、

cd <memory-stick-mount-point>
git clone <local-path-to-git-repo>

これで、<local-path-to-git-repo>がUSBスティックのリポジトリのOriginリモートになるため、後でgit Push/pull(オンラインマシンにマウントされている場合)を使用してオフライン作業を同期できます。 。

メモリースティックのgitリポジトリは自己完結型であるため、任意のコンピューターでそれを処理し、オンラインマシンにマウントするときに上記のように同期できます。

編集、re:スティックを自分でマウントすることは許可されていません:

管理者にレポをメモリースティックにgit cloneするように頼むことができれば問題ありません。それ以外の場合、管理者はproject.gitディレクトリ全体(裸のリポジトリの場合)またはproject/.git(それ以外の場合)をメモリスティックにコピーするだけで済みます。これに対処するには、リモートに注意する必要があります。 、等はオンライン機のものとなります。

その場合、プルは問題ではありませんが、マージの競合を解決するためにシステム管理者を信頼していない場合は、プッシュすることでさらに回避策が必要になる場合があります。独自のブランチがある場合、マージは問題になりません。それ以外の場合、「オフライン」でマージを行うには、レポのオフラインコピーを2つ、1つは作業中、もう1つは「オリジン」にすることができます。 、戻ってきたら、sysadmに「Origin」リポジトリへのgit pullを依頼し、オフラインコンピュータで、2つのメモリスティックリポジトリ間のマージを実行してから、sysadmにOriginリポジトリをマージするように依頼します。オンラインのもの。

ただし、これは少しもろく、競合状態に対してオープンであると感じるので、「オフラインにする」前に、実際には別々のブランチを作成しようとします。

6
drRobertz

コマンドgit bundleはこのために設計されています。たとえば、リポジトリのマスターブランチをオフラインで複製するには、

cd my-repository
git bundle create offline-repos master

これにより、masterブランチ全体がoffline-reposという名前のファイルに保存されます。ファイルを別のコンピューターにコピーします。そのコンピューターで、次のように入力します

git clone -b master offline-repos new-repos

これにより、new-reposからチェックアウトされたフォルダoffline-reposが作成されます。クローンを作成したバンドルファイルは、リモートリポジトリとして扱われます。次のように、参照以降の変更を格納するバンドルを作成することもできます。

git bundle create offline-repos e45ad329..master

バンドルファイルoffline-reposを新しい変更を含むバンドルに置き換えると、次のようにgit pullすることができます。

cd new-repos
git pull
1
yig