レポートの PDF スナップショットをコミットしたリポジトリがあります。git lfs を試して、生活の質が向上するかどうかを確認したい。
ここ ( https://github.com/rtyley/bfg-repo-cleaner/releases )の手順に従って、BFG を使用して古いバイナリを消去し、lfs に移行しました。リポジトリに Gitlab サーバーを使用することに関連するいくつかのしわがありましたが、最終的にはこれでうまくいったと思います。
私たちが何をしたかを示し、最後にマージ競合のクリーンアップについて質問するために書いています。
抄録をお見せします。「--mirror」クローン (裸のレポ) をチェックアウトし、BFG がその作業を行い、いじってからプッシュバックします。
guides-to-lfs$ git clone --mirror git@gitlab.kucenter.edu:crmda/guides.git
Cloning into bare repository 'guides.git'...
X11 forwarding request failed on channel 0
remote: Counting objects: 865, done.
remote: Compressing objects: 100% (527/527), done.
remote: Total 865 (delta 318), reused 834 (delta 303)
Receiving objects: 100% (865/865), 151.75 MiB | 25.74 MiB/s, done.
Resolving deltas: 100% (318/318), done.
Checking connectivity... done.
guides-to-lfs$ cd guides.git/
guides.git$ java -jar ~/bin/bfg-1.12.13.jar --convert-to-git-lfs '*.{pdf,ogv,tar.gz,zip}' --no-blob-protection
Using repo : /home/pauljohn/GIT/CRMDA/guides-to-lfs/guides.git
Found 0 objects to protect
Found 3 commit-pointing refs : HEAD, refs/heads/master, refs/tmp/fd782dd8787a3ffb673455d1eafb9869/head
Protected commits
-----------------
You're not protecting any commits, which means the BFG will modify the contents of even *current* commits.
This isn't recommended - ideally, if your current commits are dirty, you should fix up your working copy and commit that, check that your build still works, and only then run the BFG to clean up your history.
Cleaning
--------
Found 124 commits
Cleaning commits: 100% (124/124)
Cleaning commits completed in 1,933 ms.
Updating 2 Refs
---------------
Ref Before After
--------------------------------------------------------------------
refs/heads/master | e3327ef1 | e4ac76a2
refs/tmp/fd782dd8787a3ffb673455d1eafb9869/head | 74ccc454 | 6639b246
Updating references: 100% (2/2)
...Ref update completed in 19 ms.
Commit Tree-Dirt History
------------------------
Earliest Latest
| |
.......DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
D = dirty commits (file tree fixed)
m = modified commits (commit message or parents changed)
. = clean commits (no changes to file tree)
Before After
-------------------------------------------
First modified commit | cdd8f486 | 5e6b64eb
Last dirty commit | e3327ef1 | e4ac76a2
Changed files
-------------
Filename Before & After
--------------------------------------------------------------------------------------------------------------------
01.LISREL.Syntax.pdf | 71a17dcc ⇒ 7f217f4d
02.ReadingDataIntoLISREL.pdf | c05c3fe6 ⇒ e7238e11
03.InterpretingLISRELOutput.pdf | 6ef054c8 ⇒ a2a63813
04.StartingValuesInLISREL.pdf | 335d7a09 ⇒ c86439ee, 9f6fc232 ⇒ 05182a86
05.WhatToReport.pdf | 2bee7a8d ⇒ 1106d2f4, 3d30b103 ⇒ ce27382c
06.Satorra-BentlerChi-Sq.pdf | 94ec6fd2 ⇒ b81d08b4, 7cd29d48 ⇒ 704d5f30
...
In total, 375 object ids were changed. Full details are logged here:
guides.git.bfg-report/2016-10-05/14-03-18
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive
guides.git$ git reflog expire --expire=now --all
guides.git$ git gc --prune=now
これを試す場合は、レポにプッシュバックする際のトラブルに備える必要があります。1 つの問題は、8.12 より前の Gitlab では、git の SSH 転送と git lfs の HTTPS 転送の間でパスワード管理が統合されていなかったことです。もう 1 つの問題は、Gitlab プロジェクトの「保護」です。これは、Gitlab を使用している場合に見られる可能性があります。初めてプッシュしたときにこれを見ました:
guides.git$ git push
X11 forwarding request failed on channel 0
Git LFS: (0 of 105 files) 0 B / 140.38MB
http: Post https://gitlab.kucenter.edu/crmda/guides.git/info/lfs/objects/batch: x509: certificate signed by unknown authority
http: Post https://gitlab.kucenter.edu/crmda/guides.git/info/lfs/objects/batch: x509: certificate signed by unknown authority
error: failed to push some refs to 'git@gitlab.kucenter.edu:crmda/guides.git'
この問題を回避するためにいくつかの変更を加えました。Gitlab の最新バージョン (8.12.4) が必要でした。古い証明書を無視するように Git に指示する必要がありました。Gitlab サーバーでは、開発者がプッシュできるようにプロジェクトを「保護しない」必要がありました。私は所有者であり、通常の git の変更をプッシュできるため、なぜそれが必要なのかわかりませんが、どうやら lfs の統合は異なるようです。大騒ぎした後、リポジトリへのプッシュバックに成功しました。
guides.git$ GIT_SSL_NO_VERIFY=true git push
X11 forwarding request failed on channel 0
Git LFS: (0 of 0 files, 105 skipped) 0 B / 0 B, 140.38 MB skipped Counting objects: 866, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (520/520), done.
Writing objects: 100% (866/866), 32.94 MiB | 26.41 MiB/s, done.
Total 866 (delta 311), reused 866 (delta 311)
To git@gitlab.kucenter.edu:crmda/guides.git
+ e3327ef...e4ac76a master -> master (forced update)
+ 74ccc45...6639b24 refs/tmp/fd782dd8787a3ffb673455d1eafb9869/head -> refs/tmp/fd782dd8787a3ffb673455d1eafb9869/head (forced update)
成功!
次に、このリポジトリの作業ディレクトリに戻り、PDF ファイルが保存されているディレクトリに戻り、git pull を試しました。対処しなければならないマージの競合がたくさんあります。
guides$ git pull
X11 forwarding request failed on channel 0
remote: Counting objects: 792, done.
remote: Compressing objects: 100% (491/491), done.
remote: Total 792 (delta 294), reused 791 (delta 293)
Receiving objects: 100% (792/792), 32.92 MiB | 54.09 MiB/s, done.
Resolving deltas: 100% (294/294), done.
From gitlab.kucenter.edu:crmda/guides
+ e3327ef...e4ac76a master -> origin/master (forced update)
warning: Cannot merge binary files: keyword_guide/guide_keywords.pdf (HEAD vs. e4ac76a2561fd4dc3ca52971e8ee3d5cbe930a0c)
warning: Cannot merge binary files: Spanish_KUant_Guides/PDFs/9._opcion_RP_en_LISREL.pdf (HEAD vs. e4ac76a2561fd4dc3ca52971e8ee3d5cbe930a0c)
warning: Cannot merge binary files: Spanish_KUant_Guides/PDFs/8._Imputacion_de_datos.pdf (HEAD vs. e4ac76a2561fd4dc3ca52971e8ee3d5cbe930a0c)
warning: Cannot merge binary files: Spanish_KUant_Guides/PDFs/7._bootstrap.pdf (HEAD vs. e4ac76a2561fd4dc3ca52971e8ee3d5cbe930a0c)
warning: Cannot merge binary files: Spanish_KUant_Guides/PDFs
[...snip out hundreds of those ...]
Automatic merge failed; fix conflicts and then commit the result.
おそらく、リモートのクリーンなクローンを作成して、そこから先に進むと思います。私がインターネットで見つけた指示は、それについてはあまり役に立ちません。それらは主に、進行中の lfs や lfs のクローンを扱うことについてではなく、lfs を使い始めることに関するものです。誰かがこのことを複製し、lfs を持っていなかったらどうなるか、少し心配です。ああ、まあ、見てみましょう。
これが私の質問です。これらのバイナリ競合のすべてに対処したい場合、どうすればよいでしょうか? サーバーからのすべての変更を単に受け入れたい場合は、競合する「fn.pdf」ごとに1回、これを何度も実行する必要があるようです。
$ git checkout --theirs -- fn.pdf
$ git add fn.pdf
それを何度も行うのは面倒に思えますが、できると思います。
また、こちら (バイナリ ファイルとの Git の競合の解決) で試してみるため のアドバイスも見つけました。
$ git mergetool
しかし、私はそれとどのように相互作用するかを確実に伝えることはできません. diff は 3 列のバッファーを持つ gvim フレームを起動しますが、うまくナビゲートできませんでした。編集者の地獄に私を着陸させているように私には思えます。