2012-09-08 16 views
7

Git deposunun bir dizininden yeni bir depo oluşturabileceğimi biliyorum. Buraya bakın: Bu dizinin geçmişini korurken bir dizini bir depodan başka bir farklı dizinin yeni bir dizinine nasıl kopyalayabilirim?Dizini bir git deposundan diğerine kaydetmek ve geçmişi korumak için nasıl kopyalarım?

Güncelleme: Bu geçmişin git günlüğü ile gösterilmesi mümkün mü?

+0

GitHub url şu an: https://help.github.com/articles/splitting-a-subpath-out- yeni bir depoya –

cevap

6

Bunu git filter-branch ile yapabilirsiniz. Temel olarak şunu yapmak istersiniz:

  1. İlk projedeki alt yolu, daha önce bulduğunuz bağlantıyı kullanarak yeni bir depoya ayırın.
  2. İkinci projenin uzaktan kumandasına benzersiz bir dalda itin.

    git filter-branch --index-filter ' 
        git ls-files -sz | 
        perl -0pe "s{\t}{\tnewsubdir/}" | 
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
         git update-index --clear -z --index-info && 
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" 
    ' HEAD 
    
    Nihayet
  3. , sen ne olursa olsun şube ikinci projenin master dalını ödeme (veya:

  4. sonra doğru alt dizine endeks-filtreye bunu için git filter-branch kullanın ikinci depoya bu kolu Getirme kullanarak), yeni filtrelenen dalda birleştirin.

Gerçekten de bir operasyon çok korkunç değil. AlexanderGladysh yorumlarda not aldığından, 3 ve 4. adımların yerine subtree merging strategy da kullanabilirsiniz.

+0

3 ve 4 numaralı adımlar yerine alt birleştirme birleştirme stratejisi kullanmadınız mı? –

+0

@AlexanderGladysh Evet. Bunu bir alt ağaç birleştirme stratejisiyle yapabilirdiniz. Cevabını buna göre düzenledim. – Christopher

+0

Hmm. Alt ağaç birleştirme stratejisiyle gitmeye karar verdim. Bir sorun, bu dizinde git kütüğünün günlüğe kaydedilmesi, yalnızca geçmişin tamamlanma sürecini değil, geçmişini gösterir :(. Bu beklenen mi? – namin

İlgili konular