SORU
10 Kasım 2008, PAZARTESİ


Birleştirme birden fazla gıt depoları

Bakalım benzer bir kurulum var demek

phd/code/
phd/figures/
phd/thesis/

Tarihsel nedenlerden dolayı, bu kendi git kendi depoları var. Ama işler biraz kolaylaştırmak için tek tek onları birleştirmek istiyorum. Örneğin, şu anda iki takım değişiklikler yapmak gibi bir şey yapmak zorunda kalabilirim

cd phd/code
git commit 
cd ../figures
git commit

(Artık) iyi gerçekleştirmek için olurdu

cd phd
git commit

Bunu yapmanın birkaç yolu alt modüller kullanarak veya çekerek alt depoları var, ama benim aradığım biraz daha karmaşık. En azından mutlu olurdum

cd phd
git init
git add [[everything that's already in my other repositories]]

ama bu oyunu bir gibi görünmüyor. Bana yardımcı olabilecek git bir şey var mı?

CEVAP
6 Mart 2009, Cuma


İşte here verdim bir çözüm:

  1. Bunu doktora dizininin komple bir yedeğini önce: zor iş kaybetme yıl sorumlu tutulmak istemiyorum! ;-)

    $ cp -r phd phd-backup
    
  2. phd/code/code phd/code içeriği taşımak ve Tarih hep orada (bu kullanır. filter-branch komut gıt) olmuştur gibi görünüyor o zaman Düzelt

    $ cd phd/code
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&code/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    
  3. phd/figures phd/thesis içeriği (sadece figures thesis code değiştirin) için aynı.

    Şimdi dizin yapısı bu gibi görünmelidir:

    phd
      |_code
      |    |_.git
      |    |_code
      |         |_(your code...)
      |_figures
      |    |_.git
      |    |_figures
      |         |_(your figures...)
      |_thesis
           |_.git
           |_thesis
                |_(your thesis...)
    
  4. Sonra kök dizine git deposu oluşturmak, her şeyi içine çekip, eski depoları kaldırın:

    $ cd phd
    $ git init
    
    $ git pull code
    $ rm -rf code/code
    $ rm -rf code/.git
    
    $ git pull figures
    $ rm -rf figures/figures
    $ rm -rf figures/.git
    
    $ git pull thesis
    $ rm -rf thesis/thesis
    $ rm -rf thesis/.git
    

    Son olarak, artık istediğin şey olmalıdır:

    phd
      |_.git
      |_code
      |    |_(your code...)
      |_figures
      |    |_(your figures...)
      |_thesis
           |_(your thesis...)
    

Bu işlem için bir güzel yan bırakacaktırsürüm bilgisi olmayanyere dosyaları ve dizinleri.

Bu yardımcı olur umarım.


Sadece tek bir kelime ile ihtar: code dizin zaten var bir code alt dizin veya dosya, şeyler olabilir gitmek çok yanlış (aynı figures thesis elbette). Eğer durum buysa, sadece bu dizini yeniden adlandırmak veya tüm bu prosedür geçmeden önce dosya:

$ cd phd/code
$ git mv code code-repository-migration
$ git commit -m "preparing the code directory for migration"

Ve işlem tamamlandığında, bu son adım ekleyin:

$ cd phd
$ git mv code/code-repository-migration code/code
$ git commit -m "final step for code directory migration"

Eğer code alt dizin veya dosya sürümü yaratılmışsa değil elbette, sadece git mv yerine mv kullanma ve git commits unut.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hollyscoop

    Hollyscoop

    30 Ocak 2007
  • Palmundo Ec

    Palmundo Ec

    11 HAZİRAN 2009
  • The Verge

    The Verge

    8 AĞUSTOS 2006