2013-07-30 45 views
4

我想將幾個目錄從一個git項目移動到另一個目錄,以保留它們的歷史記錄。問題是,我看到的所有例子似乎都顯示瞭如何將目錄提取到其自己的git項目中,並使用git filter-branch保存歷史記錄。如果目標存儲庫已經有其他版本化的文件(不與以任何方式移動的文件相沖突),是否可以將這些目錄從一個存儲庫移動到另一個存儲庫,並保留其歷史記錄?將多個目錄從一個git項目移動到另一個,保留它們的歷史

難道有人請告訴我一個如何做到這一點的例子嗎?謝謝!

+0

請指定您希望合併歷史記錄的外觀如下:按日期排序的提交,一個接一個的項目,...? – krlmlr

+0

@krlmlr:你能告訴我兩個例子嗎?我認爲按日期會很好。 – carlspring

+0

我的評論只是指出了問題規範中的一個小故障。這是否有助於你:http://stackoverflow.com/q/1425892/946850? – krlmlr

回答

2

回答我的問題與這個小腳本我在bash敲起來(請確保您先閱讀它,並已備份的文件):

#!/bin/bash 

gitURL=$1 
project=$2 
srcProjectBaseDir=$3 
destProjectBaseDir=$4 

# Remove stale checkouts in order to do a clean clone 
rm -rf ${srcProjectBaseDir} 

git clone --no-hardlinks $gitURL ${srcProjectBaseDir} 
cd ${srcProjectBaseDir} 
git remote rm origin 

# These make sure your extracted module is called as the directory's name. 
# If this is of no interest to you, comment out these three lines and you 
# should be alright. 
mkdir temp 
git add temp 
git mv ${project}/ temp/ 

git commit -m "Refactoring: Isolated files for filter-branch." 

git filter-branch --subdirectory-filter temp HEAD 

git add . 
git commit -m "Refactoring: Filter branched." 


if [ ! -d ${destProjectBaseDir} ]; then 
    mkdir ${destProjectBaseDir} 
    cd ${destProjectBaseDir} 
     git init 
    cd .. 
fi 

cd ${destProjectBaseDir} 
git remote add repositoryAbranch ${srcProjectBaseDir} 
git pull repositoryAbranch master 
git remote rm repositoryAbranch 

這個腳本是基於大多數指令看到here (有幾個補充)。

+0

這不起作用。 'git filter-branch'消除了所有的歷史。 –

相關問題