2009-11-07 30 views
15

Điều gì sẽ là cách tốt nhất để thiết lập máy nhân bản git chỉ đọc của một kho lưu trữ svn hiện có và thiết lập các móc hậu cam kết sao cho bất cứ khi nào ai đó cam kết với svn, git gương được tự động cập nhật? Chủ yếu, tôi muốn chạy bản sao git-svn chỉ một lần, trên máy chủ, và sau đó cho phép mọi người chỉ cần kiểm tra từ git mà không cần phải git-svn sao chép toàn bộ kho svn.Chỉ đọc git mirror của một kho svn

Trả lời

4

Tôi làm điều đó trên một dự án sử dụng SVN (đẩy vào kho lưu trữ công cộng trên github). Tôi không có một móc nối SVN, nhưng điều này trên một công việc cron:

#!/bin/bash 

repo=/path/to/my-mirror.git 
lockfile="$repo/cron-lock" 

if ! lockfile -r1 "$lockfile";then 
     exit 1 
fi 

export GIT_DIR=$repo 
# update refs/remotes/git-svn: 
git svn fetch -q 
# make 'master' match the git-svn branch: 
git fetch "$repo" refs/remotes/git-svn:refs/heads/master 
# publish to github 
git push github master 

rm -f "$lockfile" 

Nếu bạn kích hoạt này từ một móc nối SVN thay vì một công việc định kỳ, nó sẽ hoạt động.

Tất nhiên, bạn cần thiết lập điều khiển từ xa được gọi là github sử dụng git remote add github [...]. Kho lưu trữ git mà tôi đang sử dụng là kho lưu trữ "trống" (xem git init --bare).

+0

cảm ơn, sử dụng github dường như là cách để đi –

2

Cách tốt nhất để thiết lập gương Svn/Git (có thể ghi) sẽ là sử dụng SubGit - đây là công cụ được phát triển đặc biệt cho tác vụ này. Disclaimer: Tôi là nhà phát triển của công cụ này.

+0

đẹp, nhờ –

+1

Bên cạnh đó, SubGit 2.0 không còn cần quyền truy cập cục bộ vào kho lưu trữ Subversion và có thể xây dựng một gương Git có thể ghi được từ kho lưu trữ Subversion từ xa nữa (xem http: // subgit.com/eap). –

+2

@AlexanderKitaev Xin lưu ý rằng bạn phải tiết lộ liên kết của mình khi liên kết với một sản phẩm hoặc một trang web khác. Tôi thấy từ [bài đăng này] (http://stackoverflow.com/a/13288270/2057919) mà bạn đã phát triển SubGit. Tôi đã chỉnh sửa câu trả lời này để phản ánh điều đó. Trong tương lai, hãy chắc chắn đề cập đến kết nối của bạn nếu bạn liên kết với SubGit. –

Các vấn đề liên quan