SORU
25 ŞUBAT 2009, ÇARŞAMBA


Nasıl mercurial gelen Revizyon Tarihi verme veya cvs için git?

Cvs kullanan bir projeden kod diğer insanlar ile çalışmak için gidiyorum. Dağıtılmış bir vcs bitirdiğimizde belki de arada bir bizim kod ve revizyon tarihimizin tüm işlemek istiyoruz işimizi yapmak ve cvs için kullanmak istiyoruz. Projenin cvs repo yazma erişimi yok çok sık vaat edemeyiz. Aracı biz cvs için revizyon tarihimiz vermek için ne kullanabilirim? Şu anda git veya mercurial kullanmayı düşünüyorduk ama ihracat daha kolay olur Eğer başka bir dağıtılmış vcs kullanabiliriz.

CEVAP
25 ŞUBAT 2009, ÇARŞAMBA


Hala CVS kullanmak zorunda olan bizler için neyse ki, git güzel yapmak istediğin tam olarak yapmak için araçlar sağlar. (Ve biz burada ne $iş) öneriler

İlk Klon yaratmak

git cvsimport bir git deposuna CVS Revizyon Tarihi klonlamak için kullanın. Aşağıdaki çağrı kullanın:

% git cvsimport -d $CVSROOT -C dir_to_create -r cvs -k \
  -A /path/to/authors/file cvs_module_to_checkout

-A seçeneği isteğe bağlıdır ama yardımcı olun sizin revizyon tarihin ithal CVS bak daha git-gibi (bkz man git-cvsimport daha fazla bilgi konusunda nasıl bu kurmak).

CVS deposuna boyut ve tarihe bağlı olarak, bu ilk almak ÇOK uzun bir zaman alacaktır. Eğer Eğer bir şey, aslında o huzuru olmasını istiyorsanız-v yukarıda bir komut ekleyebilirsiniz.

Bir kez bu süreci tamamlandı, bir olacak master şube gereken yansıtmak CVS KAFASI (dışında git cvsimport varsayılan olarak yok sayar son 10 dakika değerinde iptalleri önlemek için alıcı bir taahhüt, bu yarı-bitmiş). Sonra baştan gıt kullanarak olsaydı gibi git log ve arkadaşlar depoyu tüm geçmişi incelemek için kullanabilirsiniz.

Yapılandırma Düzenlemeler

Gelecekte CVS (ihracat) artan ithalatı daha kolay hale getirecek birkaç yapılandırma nokta vardir. Bu git cvsimport man sayfasında belgelenmiştir haber vermeden ama, FWIW: değiştirebilirler sanırım

% git config cvsimport.module cvs_module_to_checkout
% git config cvsimport.r cvs
% git config cvsimport.d $CVSROOT

Bu seçeneklerin hepsi güvenle bu adımı atla diye bir komut satırında belirtilebilir.

Artan İthalat

Sonraki git cvsimport ilk çağırma çok daha hızlı olmalıdır. Ancak, hala birkaç dakika sürebilir bu yüzden her dizin (Attic dosyalar sadece olanların bile) cvs rlog bir de yapacaktır. Eğer yukarıda önerilen yapılandırmaları belirttiyseniz, yapmanız gereken tüm çalıştırmak

% git cvsimport

Eğer yapılandırmaları varsayılan ayarları belirtmek için ayarlanmış olsanız bile, komut satırında bunları belirtmek gerekir:

% git cvsimport -r cvs -d $CVSROOT cvs_module_to_checkout

Her halükarda, akılda tutulması gereken iki şey var

  1. Git deponuzun kök dizininde olduğunuzdan emin olun. Eğer başka bir yerde iseniz, bir daha sonsuza kadar sürecek bir taze cvsimport yapmak için çalışacağız.
  2. Değişiklikleri birleştirilmiş (veya rebased) yerel/konu dallara böylece master şube olduğunuzdan emin olun.

Yerel Değişiklikler Yapma

Uygulamada, bu değişiklikleri CVS deposuna geri vermek için hazır olduğunda her zaman dallar üzerinde değişiklik yapmak ve sadece birleştirme 25 ** öneririm. Kullanabilirsiniz ne olursa olsun iş akışı gibi üzerinde dalları (birleştirme, rebasing, ezici, vb) elbette standart rebasing kurallar uygulanır: yok rebase eğer başka biri oldu dayandırarak değişiklikleri üzerinde şube.

İhracat CVS Değişiklikler

git cvsexportcommit komut CVS commit için tek bir sunucu vermenize olanak sağlar. Taahhüt tek bir KİMLİĞİ (ya da belirli bir taahhüt olarak tanımlayan bir şey man git-rev-parse tanımlı) belirtebilirsiniz. Bir diff sonra, CVS checkout ve sonra (isteğe bağlı olarak) CVS cvs gerçek istemci kullanarak taahhüt uygulanan oluşturulur. Mikro konu üzerinde dalları işlemek her ama birleştirme güncel master bir kayıt üzerinde bir oluşturmak istiyorum genellikle ihracat ve tek birleştirme ihracat CVS commit. Birleştirme tamamlama verirken, üst taahhüt git diff oluşturmak için söylemelisin. Ayrıca, bu işe yaramaz eğer birleştirme bir fast-forward (bkz: "NASIL BİRLEŞTİRME ÇALIŞMALARI" bölümünde man git-merge için bir açıklama, bir ileri birleştirme) var bu yüzden kullanmak için --no-ff seçeneği ne zaman sahne birleştirme. İşte size bir örnek:

# on master
% git merge --no-ff --log -m "Optional commit message here" topic/branch/name
% git cvsexportcommit -w /path/to/cvs/checkout -u -p -c ORIG_HEAD HEAD

Bu seçeneklerin her man page for git-cvsexportcommit üzerinde ne demek istediğimi görebilirsiniz. Git sizin config -w seçeneği ayarlama seçeneği var:

% git config cvsexportcommit.cvsdir /path/to/cvs/checkout

Eğer yama her ne sebeple olursa olsun başarısız olursa, benim deneyim (ne yazık ki) muhtemelen daha iyi el ile değiştirilen dosyaları kopyalama ve cvs istemcisi kullanarak işlemiş olursun. Bu master CVS ile güncel olduğundan emin konu dalında birleştirmeden önce yaparsanız, ancak durum olmamalı.

Eğer kaydetme başarısız her ne sebepten olursa olsun (ağ/izin sorunları, vb.), al komutu çıktısı terminal sonunda hata çıktı ve yürütmek senin CVS çalışma dizini. Genellikle bu gibi bir şey görünüyor:

% cvs commit -F .msg file1 file2 file3 etc

Bir dahaki sefere yerel deposuna git cvsimport (en az 10 dakika bekleyen) yeniden ithal ihraç taahhüt yama görmelisin. Farklı CVS farklı bir zaman damgası ve muhtemelen farklı committer adı (cvsimport ilk yukarıdaki yazarlar bir dosya kümesini bağlı olarak) taahhüt beri Kimlikleri taahhüt eder.

Eğer CVS klonlama klon

Eğer birden fazla kişi ihtiyacı için cvsimport verilecek ve daha verimli olması bir git deposu bu gerçekleştirir cvsimport ve tüm diğer depoları oluşturulan bir klon. Bu ve klonlanmış depoyu, yukarıda açıklandığı gibi cvsexportcommits gerçekleştirebilir mükemmel çalışıyor. Bir uyarı, ancak vardır. CVS commit farklı Kimlikleri ile gelir iptalleri nedeniyle (yukarıda açıklandığı gibi), klonlanmış Şubesi Merkez git deposu izlemek istemiyorum. Varsayılan olarak, bu git clone depo yapılandırır ama bu kolayca düzeltilebilir:

% git clone [CENTRAL_REPO_HERE]
% cd [NEW_GIT_REPO_DIR_HERE]
% git config --unset branch.master.remote
% git config --unset branch.master.merge

Bu yapılandırmaları kaldırdıktan sonra, açıkça söylemek zorunda kalacak ve yeni çekmek istediğinizde çekmek için ne Merkez deposundan eder:

% git pull origin master

Genel olarak, bu iş akışını oldukça yönetilebilir ve buldum sonraki en iyi şey "tamamen gıt geçirirken" pratik değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christian Atlas

    Christian At

    26 Mart 2009
  • Jared Busch

    Jared Busch

    25 Mayıs 2011
  • michellefeng's channel

    michellefeng

    26 Kasım 2006