2011-04-07 11 views
10

क्या एक स्वचालित फैशन में किसी अन्य भंडार की उपनिर्देशिका होने के लिए और उसके सभी टैग को स्थानांतरित करने का कोई तरीका है?भंडार फ़िल्टर करते समय मैं टैग कैसे संरक्षित करूं?

कारणों से, एक परियोजना को कई रिपॉजिटरीज़ में विभाजित किया गया था। अब हम देखते हैं कि इतना गर्म विचार नहीं था और इसे दोबारा वापस लाने के लिए चाहते हैं। Submodules माना जाता था, लेकिन वे वास्तव में एक परियोजना है और हमें उनके बीच कई फाइलों को स्थानांतरित करने की जरूरत है।

मान लीजिए कि हम भंडार ए, बी और सी है और हम एक उपनिर्देशिका के रूप में उनमें से प्रत्येक के साथ एक परियोजना चाहते हैं:

project/ 
    A/ 
    B/ 
    C/ 

git-filter-branch --tree-filter साथ पूरा किया जा सकता है। हो गया, कोई समस्या नहीं है। और यह शाखाओं को भी सही ढंग से भी करता है, जो एक सुखद आश्चर्य था।

समस्या यह है कि ए, बी और सी टैग हैं, और उन्हें सभी को भी परिवर्तित करने की आवश्यकता है।

क्या यह स्वचालित हो सकता है?

उत्तर

13

मुझे लगता है कि मैं अपने प्रश्न का उत्तर दे सकता हूं। --tag-name-filter cat को git-filter-branch कॉल पर जोड़ना। -- --all एक ही बार में सभी शाखाएं और टैग रूपांतरण को तेज करते हैं। यहां पूर्ण कॉल है।

git filter-branch --tree-filter 'move-to-subdir $subdir' --prune-empty --tag-name-filter cat -- --all 

चाल-से-सबदीर एक छोटे से प्रोग्राम होने के साथ मैंने उपनिर्देशिका बनाने और फ़ाइलों को इसमें स्थानांतरित करने के लिए लिखा था।

#!/usr/bin/env perl 

use Path::Class; 
use autodie; 

my $subdir = shift; 

mkdir $subdir unless -d $subdir; 

my $cwd = dir("."); 
my @kids = grep { $_ ne $subdir } $cwd->children; 
for my $dir (@kids) { 
    rename $dir, dir("$subdir/$dir")->cleanup; 
} 

यह जानकारी गिट-फ़िल्टर-शाखा मैन पेज में है, लेकिन यह अस्पष्ट है।

संबंधित मुद्दे

 संबंधित मुद्दे