Chuyển đổi thư mục Mercurial sang kho Git


137

Tôi không có trải nghiệm lớn với Mercurial, tôi chủ yếu là một anh chàng Git.

Tôi rất thích phản chiếu một thư mục / tệp Mercurial cụ thể trong Kho git. Những gì tôi thực sự đang cố gắng là xuất lịch sử của tệp từ kho lưu trữ Mercurial sang Git và có thể giữ điều này đồng bộ với các cam kết trong tương lai.

Bạn có bất cứ đề nghị về cách tiến hành? Tôi tin rằng cách tốt nhất là lấy lịch sử của bản vá Mercurial, định kỳ xuất từng cam kết dưới dạng bản vá và áp dụng các bản vá Mercurial cho kho lưu trữ Git.


Ngày nay, GitHub.com sẽ nhập nó cho bạn .
Brad Turek

Câu trả lời:


125

Trên Linux hoặc bất cứ thứ gì có bash/shhoặc tương tự, hoặc python, hãy thử với xuất nhanh :

cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

1
Ok, bạn muốn giữ git đồng bộ hóa với đồng bóng? Như thế này ?
Yohann

1
Lưu ý rằng '/ path / to / old / mercurial numpo' phải là một đường dẫn trên hệ thống tệp (không phải URL), vì vậy bạn phải sao chép kho lưu trữ ban đầu trước đó.
10

1
Trong trường hợp của tôi đã phải sử dụng PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Ngoài ra, nó hoạt động hoàn hảo.
Artur Czajka

5
Cảm ơn câu trả lời súc tích! Tôi đã phải sudo easy_install mercurialđầu tiên. Sẽ rất tuyệt nếu được hướng dẫn
Marcus Westin

3
Nếu bạn đang dùng máy Windows, hãy sử dụng Git bash và chạy hg-fast-export.sh
Augustas

61

Windows: Tiện ích mở rộng Rùa HG-Git

Hg-Git có thể được sử dụng để chuyển đổi kho lưu trữ Mercurial sang Git. Bạn có thể sử dụng kho lưu trữ cục bộ hoặc kho lưu trữ từ xa được truy cập thông qua SSH, HTTP hoặc HTTPS.

Ví dụ về chuyển đổi kho lưu trữ cục bộ.

  1. Cài đặt Hg-Git.

    • Trên Windows, TortoiseHg đi kèm với Hg-Git, mặc dù bạn cần kích hoạt nó thông qua công cụ cài đặt (trong phần mở rộng)

      Cài đặt rùaHg

      hoặc thủ công trong ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Sử dụng các lệnh sau để chuyển đổi kho lưu trữ:

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    

Các hgbookmark là cần thiết để ngăn chặn vấn đề như push khác hg-git đến hiện kiểm tra ra chi nhánh khó hiểu Git. Điều này sẽ tạo ra một nhánh có tên hgtrong kho Git. Để có được các thay đổi trong bản gốc, hãy sử dụng các lệnh sau (chỉ cần thiết trong lần chạy đầu tiên, sau đó chỉ cần sử dụng git mergehoặc rebase):

$ cd git-repo
$ git checkout -b master hg

Tôi đã thấy git-hg khá lỗi, nhưng điều này hoạt động như một cơ duyên và không yêu cầu bất kỳ tải xuống bổ sung nào là tốt.
Timmmm

2
Tôi muốn một thư mục, không phải toàn bộ repo.
Simone Carletti

github hiện có một công cụ hỗ trợ điều này trực tiếp từ github, xem stackoverflow.com/questions/16037787/ Khăn
Tommy

@SimoneCarletti Hãy xem câu hỏi này . Nó sẽ giúp bạn xuất một tập tin / thư mục và lịch sử của nó trong một kho lưu trữ tạm thời. Sau đó, bạn có thể sử dụng bất kỳ giải pháp được cung cấp nào để chuyển đổi kho lưu trữ Mercurial tạm thời sang Git.
naXa


11

Gitify

Có vẻ như là một thay thế hiện đại và dễ sử dụng hơn để thực hiện chuyển đổi https://github.com/buchuki/gitifyhg

pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one

1
Tôi không muốn chuyển đổi toàn bộ repo, chỉ là một thư mục.
Simone Carletti

1
Tuyệt vời! Cảnh giác với lỗi unicode mặc dù github.com/buchuki/gitifyhg/pull/98
Andrei

3
Lưu ý - gitifyhg hiện đã hết hạn với các phiên bản Mercurial mới nhất.
Zoran Pavlovic

4

Chuyển đổi kho lưu trữ Mercurial sang Git trên Windows 10

Nếu không có vấn đề gì với mã hóa - hãy sử dụng tiện ích mở rộng TortoiseHG Hg-Git

md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false

Nếu có lỗi với mã hóa - hãy sử dụng xuất nhanh

Cài đặt Bash

Mở PowerShell với tư cách Quản trị viên và chạy:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Cài đặt Ubuntu 16.04 LTS từ Microsoft Store

Mở Bash và chạy

cài đặt đồng bóng

sudo -s
apt-get update
apt install mercurial

nhận xuất nhanh v180417 (tại thời điểm hiện tại sau 180317 không hoạt động chính xác)

cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..

chuyển đổi kho lưu trữ

git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master

tùy chọn mã hóa:

  • -f mã hóa, như -f cp1251
  • --fe mã hóa tên tập tin như --fe cp1251

3

hg-git-nhập nhanh

https://github.com/kilork/hg-git-fast-import

Một tiện ích khác với các tính năng sau:

  1. Nhập kho lưu trữ đơn và nhiều Mercurial vào kho Git.
  2. Nhập bản sửa đổi mới từ kho Mercurial đã nhập trước đó vào kho Git.
  3. Thẻ.
  4. Chi nhánh kín.
  5. Xác minh kết quả cuối cùng với diff.

Bạn có thể tải xuống nền tảng nhị phân cho bạn và đặt một nơi nào đó trong đường dẫn hoặc cài đặt với cargo(yêu cầu rustphải được cài đặt ):

cargo install hg-git-fast-import

Sau đó, việc sử dụng là như thế này:

hg-git-fast-import single /path/to/source_hg /path/to/target_git

Nó không cần PythonMercurialđược cài đặt. Cấu hình nâng cao cho phép thay thế tác giả hoặc chi nhánh, làm cho các nhánh có tiền tố và hơn thế nữa.


2

Nếu bạn đang sử dụng github.com , chúng dường như có một tính năng nhập cho phép bạn chỉ cần nhập URL của dự án hg của bạn.

Đầu tiên tạo một kho lưu trữ mới và sau đó trên cuộn trang đích của kho lưu trữ mới xuống phía dưới và nhấp vào nút "Nhập mã" .

bối cảnh cho nút nhập mã

Sau đó nhập URL của kho lưu trữ trước đó của bạn và nhấn "Bắt đầu nhập".

bối cảnh cho nút "Bắt đầu nhập"

Sau đó, GitHub sẽ chăm sóc phần còn lại!

Github chăm sóc doanh nghiệp cho bạn

Lưu ý rằng GitHub sẽ hỏi bạn thông tin đăng nhập của bạn cho kho lưu trữ cũ nếu nó cần chúng.

Ôi! Tôi tìm thấy hướng dẫn chính thức


0

Trên Windows có thể là một chút khó khăn. Sau khi kích hoạt các plugin phù hợp trong mercurial ( hggit), TortoiseHG cũng có thể được sử dụng.

  1. Nhân bản repo
  2. Bản sao git repo
  3. Kích hoạt bảng điều khiển: Kích hoạt bảng điều khiển
  4. Sử dụng bảng điều khiển:

    % hg bookmarks hg

    % hg push <relative path to>/<git-repo>


0

Có thể nó giúp ai đó ngày hôm nay (khi chuyển đổi một kho lưu trữ đồng bóng sang git, trong khi vẫn giữ lại lịch sử). Đã thử nghiệm để làm việc với đồng bóng 4.0.1.

~$ git clone https://*old_hg_repo*
~$ git clone https://github.com/frej/fast-export.git
~$ cd fast-export
~$ git checkout tags/v180317
~$ cd ..
~$ mkdir new_git_repo
~$ cd new_git_repo
~$ git init
~$ .../fast-export/hg-fast-export.sh -r ../old_hg_repo/ --force
~$ git checkout HEAD

Và cuối cùng để đẩy repo địa phương mới chuyển đổi của bạn.

~$ git push REMOTE '*:*'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.