3

に似ている:

次のことを達成するためのワークフローの手順を理解しようとしています。

  1. 「ホーム」でローカルに作業したので、リポジトリを開始したいW:\DEV\proj1
    • git init W:\DEV\proj1
    • cd W:\DEV\proj1
    • git add *
    • git commit -m"1st home"
  2. 次に、このレポを別の場所(つまり、usbkey)に「ポータブル」に複製したいとします。P:\DEV\roam1
    • git clone . P:\DEV\roam1
  3. 次に、どちらの場所(「自宅」または「ポータブル」)でも作業を行い、変更を前後に同期 できるようにしたいと考えています。
    • (携帯時)
      • // new file f1.txt
      • git add *
      • git commit -m"1st portable"
      • git ??? -- f1.txt > "ホーム" を同期しますか?
    • (自宅で)
      • // new file f2.txt
      • git add *
      • git commit -m"2nd home"
      • git ??? -- 同期 f2.txt > "ポータブル"
    • 繰り返す

パート A)「集中型ハブ」、つまり github にクローンを作成して同期する方法、または USB スティックに裸のレポを置き、新しい場所にいるときはいつでもそこからクローンを作成する方法を理解していると思いますが、新しい場所で作業を完了したいときはいつでも、ポータブル レポジトリからクローンを作成します。また、git がインストールされていないコンピューター上のファイルを見たいだけの場合。

パート B)もう 1 つの適用可能なシナリオは、基本的に git を使用してディレクトリを外部ハード ドライブにバックアップしたい (これは通常、ベア リポジトリにプッシュすることで問題ありません) が、git がインストールされていない別のコンピューターのハード ドライブ上のファイルにアクセスしたい場合です。 .

4

2 に答える 2

2

@VonC's answerに基づく具体例。

デバイス

  • LOCAL= ローカル マシン、つまりC:\MyDocuments\Whatever
  • PORTABLE= USB キーなど、その他のもの

レポ

  • LOCAL/myproject/= 仕事をしたり、github にプッシュしたりする「日常的な」レポ
  • PORTABL/myproject.git= 裸の「集中型ハブ」 (USB キー上)
  • PORTABLE/myproject-preview= リポジトリからの最新コードを含む非 git フォルダー
  • PORTABLE/myproject-working= 家にいないときに作業できる git リポジトリ (基本的にはLOCAL/myproject

ファイル構造

注: 実際の個別のドライブ YMMV ではなく、コンピューターの 1 つのフォルダー内でこれをすべてテストしています。

-LOCAL/
   -myproject/
      -.git/
      - other files

-PORTABLE/
   -myproject.git/
       -hooks/
       -info/
       <etc>
   -myproject-preview/
      - other files
   -myproject-working/
      -.git
      - other files

設定

おおよそのコマンド...このブレインストーミングの前に、最初にローカルで作業していたと仮定します

# start at home
cd LOCAL
git init myproject
<do some work>
# suddenly you realize you want a portable hub
cd PORTABLE
# ready the dump locations (depending on what you want)
mkdir myproject-preview
mkdir myproject-working
# start the hub
git init myproject.git --bare
<make the post-receive hook, see below *not cool enough to do it from the command line>
# backup home
cd LOCAL/myproject
git remote add origin PORTABLE/myproject.git
git push origin master #this shows up in ...preview and ...working
<do more work>

受信後フック

@VonCの他の回答ランダムな coderwallから愛情を込めてコピーしました。

両方を実行することも、「プレビュー モード」または「ポータブル ワーク」のみを選択することもできます。

相対パスを使用していることに注意してください ( にいるためPORTABLE/myproject.git/hooks/)。

#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "master" == "$branch" ]; then
        # preview mode
        git --git-dir=../myproject.git --work-tree=../myproject-preview checkout -f
        # portable working mode (https://coderwall.com/p/oj5smw)
        GIT_WORK_TREE=../myproject-portable git checkout -f $branch
    fi
done
于 2013-11-21T21:53:25.937 に答える
1

しかし、作業を完了するたびにポータブル レポジトリからクローンを作成する必要はありません。

新しい場所でリポジトリを初期化する場合を除いて、必要はありません (その場合、ローカル環境で USB スティックの裸のリポジトリを複製します)。

仕事を終わらせたいときはいつでも、次のようにします。

  • ローカル リポジトリの「origin」という名前のリモートが、USB スティックのベア リポジトリを指していることを確認します。
  • git pull(または git pull --rebase) 潜在的な変更を USB からローカルに戻すため
  • 仕事
  • git push (USB キーに戻る)

プル/プッシュするには、ある種の「集中型/ポータブル」レポが必要です。


「集中型ハブ」を裸のレポにしたくないのは、gitなしで別のコンピューターに行き、誰かにファイルを見せたいだけだとしましょう

私はまだ USB スティックのベア レポをお勧めしますが、別の作業ツリーを更新するために、そのベア レポにpost-receive フックを追加します (まだUSB スティックにあります)。

そのようなフックの例として、「コミットされたファイルを特定のフォルダにコピーするフックを設定したい」を参照してください。

そうすれば、「集中型でポータブルな」git リポジトリ ホスティング環境 (つまり、USB キー!) で常に次のようになります。

  • ベアレポ(クローン/プル/プッシュできます)
  • 最新のコミットで最新の完全な作業ツリー。
于 2013-08-07T07:33:06.593 に答える