Git невозможно импортировать репозиторий, созданный старой версией git из-за дублированной записи файла - PullRequest
2 голосов
/ 05 августа 2020

У меня есть репозиторий на частном сервере gitlab. Версия сервера gitlab - 11.4.8, а встроенная версия git - 2.18.1

Мне нужно настроить удаленное зеркало для этого репозитория, удаленное зеркало - это еще один сервер gitlab, его версия 13.2.2 и встроенная версия git - 2.27.0

При попытке синхронизировать c это репо с удаленным зеркалом выдает такую ​​ошибку:

2:remote: error: object c95bcfcfd91157c03fbfa9bd537adf77ee9665f9: duplicateEntries: contains duplicate file entries        
remote: fatal: fsck error in packed object        
error: remote unpack failed: index-pack abnormal exit
To 
 ! [remote rejected]   master -> master (unpacker error)
 ! [remote rejected]   develop -> develop (unpacker error)
 ! [remote rejected]   feature_accessCard_20200316 -> feature_accessCard_20200316 (unpacker error)
 ! [remote rejected]   feature_creditcard -> feature_creditcard (unpacker error)
 ! [remote rejected]   feature_dev -> feature_dev (unpacker error)
 ! [remote rejected]   feature_dev2 -> feature_dev2 (unpacker error)
 ! [remote rejected]   feature_dev_hotfix_20191223 -> feature_dev_hotfix_20191223 (unpacker error)
 ! [remote rejected]   feature_guijinshu_20200205 -> feature_guijinshu_20200205 (unpacker error)
 ! [remote rejected]   feature_hotfix -> feature_hotfix (unpacker error)
 ! [remote rejected]   feature_huobijinjin -> feature_huobijinjin (unpacker error)
 ! [remote rejected]   feature_init -> feature_init (unpacker error)
 ! [remote rejected]   feature_newFinancial_20191221 -> feature_newFinancial_20191221 (unpacker error)
 ! [remote rejected]   feature_qrcode -> feature_qrcode (unpacker error)
 ! [remote rejected]   feature_uat2 -> feature_uat2 (unpacker error)
 ! [remote rejected]   feature_yinbaotong_20190212 -> feature_yinbaotong_20190212 (unpacker error)
 ! [remote rejected]   release -> release (unpacker error)
error: failed to push some refs to '[FILTERED]@172.31.114.61/dianzi/legacy/BO-014/pmobile_war.git'

run git fsck с git 2.25.1 не имеют ошибки:

[ggfan@localhost pmobile_war]$ git fsck --full
Checking object directories: 100% (256/256), done.
Checking objects: 100% (18953/18953), done.
[ggfan@localhost pmobile_war]$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (18953/18953), done.
[ggfan@localhost pmobile_war]$ git --version
git version 2.25.1

run git fsck with git 2.27.0 дает ошибку, а com.csii.mca.inbound.csxml - дублированный.

[root@gitlabbak pmobile_war]# git --version
git version 2.27.0
[root@gitlabbak pmobile_war]# git fsck --full
Checking object directories: 100% (256/256), done.
error in tree c95bcfcfd91157c03fbfa9bd537adf77ee9665f9: duplicateEntries: contains duplicate file entries
Checking objects: 100% (18953/18953), done.
[root@gitlabbak pmobile_war]# git ls-tree c95bcfcfd91157c03fbfa9bd537adf77ee9665f9
040000 tree 111985da04328d73a44263c0a13068eb63de11aa    .metadata
040000 tree 1be1d9db06df603da97122b7a49cadb200dcc7d4    RemoteSystemsTempFiles
040000 tree 31ba898cb0151e7ac25393266edb87ef4f9d5ba2    com.csii.ecif.constants
040000 tree 8c0769e80ed0cd3a6c33fef92ac61e6ea58cf81d    com.csii.ecif.datamodel
160000 commit 467fec3f63ab8c715a9cb5e216a84c6e237902d6  com.csii.mca.inbound.csxml
040000 tree 559002d8373e3d639a36893ec1b658b8f69f39c7    com.csii.mca.inbound.csxml.core
040000 tree 91e4270bb2008a0bbe051578998c16256e6eacf7    com.csii.mca.inbound.csxml.per.acmgmt
040000 tree 953fb5d4901b80e14ad0968923f8982dec32c3c6    com.csii.mca.inbound.csxml.per.agent
040000 tree 7baf0c6ae35342023aa6881625daf3274a05a2fe    com.csii.mca.inbound.csxml.per.bond
040000 tree 19825fe118dd32db1de471df5c5828b2e4ef1618    com.csii.mca.inbound.csxml.per.cert
040000 tree 52db87eff5b1bb607205607dcd8d87e4bf759333    com.csii.mca.inbound.csxml.per.creditcard
040000 tree 55dccf2fe5eb9f5127cba5a0131c644e2f821474    com.csii.mca.inbound.csxml.per.customersvr
040000 tree 87dc81b43606adb6a38991d2c1ea3f98581b320d    com.csii.mca.inbound.csxml.per.epay
040000 tree 668d0a52b72518527069e4db2c2d7c1a08cecd6e    com.csii.mca.inbound.csxml.per.fund
040000 tree 7fa9e8eadb580daf8f4ede0dfd1bc266353e2941    com.csii.mca.inbound.csxml.per.gold
040000 tree ac14d5c21efbc83182423bc09909e14f1d871f16    com.csii.mca.inbound.csxml.per.ibps
040000 tree c63ba2a60e92314e41f7b4fc4c87f1886eab1791    com.csii.mca.inbound.csxml.per.loanmgmt
040000 tree 57917a6e1544dcc182366e1908d9b0bbc243292c    com.csii.mca.inbound.csxml.per.notice
040000 tree 948ad25321781517812ecb18231bfe1c7e5a4c91    com.csii.mca.inbound.csxml.per.otp
040000 tree bba64d56bd0190d2b39c5bc3defd6e2413859b28    com.csii.mca.inbound.csxml.per.payment
040000 tree f5d79883eb032a893290f1ab6523eef43b8b1a72    com.csii.mca.inbound.csxml.per.pmobile
040000 tree e1d34e2294c86d5e1257b69bbe8357f91aeb39dc    com.csii.mca.inbound.csxml.per.posvolume
040000 tree 184c4fd3be8128659a6541f6cad973b508480213    com.csii.mca.inbound.csxml.per.preprocess
040000 tree 964a67a0eb0c4764b939e24d0bdd9303967b1280    com.csii.mca.inbound.csxml.per.profolio
040000 tree 20706c314ac15f1b188874cabb9fa33d2edaab58    com.csii.mca.inbound.csxml.per.query
040000 tree 905eb2c9a60da44354f3dcbd8b6ba58f1b792f2f    com.csii.mca.inbound.csxml.per.setting
040000 tree cd1ac39e9d02b8c1138f006c3196c17b7ba2e0a6    com.csii.mca.inbound.csxml.per.stock
040000 tree 738aeabff64d1593a18b0e58470aec96336f172c    com.csii.mca.inbound.csxml.per.superbank
040000 tree 378e09413de313e7491c2da745309c26b69f499a    com.csii.mca.inbound.csxml.per.td
040000 tree c135ad90e9ea4cc68bdcc4a41d6b038e8d5bf7bf    com.csii.mca.inbound.csxml.per.transfer
040000 tree f245821b633fee0c2b7bb1d6e68178940922152e    com.csii.mca.inbound.csxml.per.zxbank
040000 tree 76ba761c6d567dd63f021fc12fd52fd2089b8f47    com.csii.mca.inbound.csxml
040000 tree 4413ba5a71f5eda25a968a73559298e82ca3e692    com.csii.mcs.constants
040000 tree 5d4138265ac3fe14eb31b5d8c2b95f56d60c12a1    com.csii.mcs.datamodel
040000 tree f7c8a2e0d79d7f2c1999119935b0a27fa36d6da9    com.csii.mcs.ibs.pdb
040000 tree e065a4c6ebcc8e0009e19c9b803d8e0dadb3110f    com.csii.mcs.ibs.pin.bos
040000 tree a79831338dd767bfc108042a744d726c2121d189    com.csii.mcs.ibs.transport.tcp
040000 tree 9381a14b1dcb1d7c2d82755bbe3cb0b8ced41c6a    com.csii.mcs.mobile.pacmgmt
040000 tree 8a1646084a30ab3dffcb70541afee74450ed1b6c    com.csii.mcs.mobile.pagent
040000 tree 44fb97ec297145fa9fcc0a32ee15076557cb13aa    com.csii.mcs.mobile.pcommon.cfg
040000 tree ea929a6bdcfe64fb18e18b62389300cc072d9a58    com.csii.mcs.mobile.pcommon
040000 tree d582f0f2a56f57a361d217fb8ebd3d059fb66e33    com.csii.mcs.mobile.pcredit
040000 tree 71a9839134ef4a0a8cebf2111a3818f646861871    com.csii.mcs.mobile.pcustomersvr
040000 tree b1024fc8071524a93a17a45c6b0124e52adaea34    com.csii.mcs.mobile.pepay
040000 tree 1cbbe6508573120f583e0a7b0a84977f85cde627    com.csii.mcs.mobile.pfinancial
040000 tree ed70fc2cc6291b3cef47dec413587674b07c04a7    com.csii.mcs.mobile.pibps
040000 tree 2ac3092cb9fc52c1d50258f263fc40f25836e989    com.csii.mcs.mobile.ploanmgmt
040000 tree 3185e0e0eb9bc64b67511cfc23d84994566a3c07    com.csii.mcs.mobile.pmnocarddraw
040000 tree 7d9bfd3a697c95749afc536a11e8a544c7bcb5ad    com.csii.mcs.mobile.pnotice
040000 tree 7e165099ccfc03480b5e77d4d09891482687028f    com.csii.mcs.mobile.pprofolio
040000 tree 86833cf03194237fc88d4418c718f3444f1b74a1    com.csii.mcs.mobile.pquery
040000 tree e2fc873314f4a4d451fb12c3229fb9a7b5c387c5    com.csii.mcs.mobile.pservice
040000 tree 8615e06bdb6784214717bde037cfcf1dac2ce61b    com.csii.mcs.mobile.ptransfer
040000 tree 6662d9963fdeaa0856109d53fb8106d8d3092932    com.csii.mcs.mobile.pzxbank
040000 tree 57f937cbea27acffe813e11bfdaf9a4c0fe96fd8    ibslib

Я нашел несколько похожих вопросов по stackoverflow, но все они довольно старые и кажутся сложными для понимания.

Может ли кто-нибудь сказать мне точные шаги для решения моей проблемы, в то время как я хочу оставить все git история, за исключением дублированной записи файла.

вот что у меня с bfg , кажется, проблема с поиском, но что дальше? Я попытался выполнить фиксацию и sh, но git говорит, что все обновлено.

[ggfan@localhost pmobile_war]$ bfg --fix-filename-duplicates-preferring tree

Using repo : /home/ggfan/Desktop/pmobile_war/.git

Found 7045 objects to protect
Found 9 tag-pointing refs : refs/tags/V1.0.0_20200418_Master_Base, refs/tags/V1.0.1_20200528_Master_Release, refs/tags/V1.0.2_20200701_Master_Release, ...
Found 19 commit-pointing refs : HEAD, refs/heads/master, refs/remotes/origin/HEAD, ...

Protected commits
-----------------

These are your protected commits, and so their contents will NOT be altered:

 * commit e1ae0e83 (protected by 'HEAD')

Cleaning
--------

Found 147 commits
Cleaning commits:       100% (147/147)
Cleaning commits completed in 235 ms.

Updating 1 Ref
--------------

    Ref                                                 Before     After   
    -----------------------------------------------------------------------
    refs/remotes/origin/feature_newFinancial_20191221 | 69df054f | 3c493e4f

Updating references:    100% (1/1)
...Ref update completed in 24 ms.

Commit Tree-Dirt History
------------------------

    Earliest                                              Latest
    |                                                          |
    ....D.......................................................

    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 | 69df054f | 3c493e4f
    Last dirty commit     | 69df054f | 3c493e4f


In total, 2 object ids were changed. Full details are logged here:

    /home/ggfan/Desktop/pmobile_war.bfg-report/2020-08-05/17-18-33

BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive


--
You can rewrite history in Git - don't let Trump do it for real!
Trump's administration has lied consistently, to make people give up on ever
being told the truth. Don't give up: https://www.aclu.org/
--

1 Ответ

0 голосов
/ 05 августа 2020

bfg исправил мою проблему:

вот точные шаги, которые я использовал:

  1. клонировать репозиторий с --mirror

    git clone --mirror $repository_url

  2. скачать bfg

    wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

  3. запустить bfg

    java -jar bfg-1.13.0.jar --fix-filename-duplicates-preferring tree $ local_repo_dir

  4. запустить git reflog

    cd $local_repo_dir

    git reflog expire --expire=now --all && git gc --prune=now --aggressive

  5. pu sh вернуться в удаленное репо

    git push

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...