我有一個現有的存儲庫,包含Github上的文件夾和文件,並且我剛剛創建了四個新的存儲庫。將文件/文件夾從一個git repo移動到另一個
我希望將現有存儲庫中的文件/文件夾分發到我剛剛創建的新存儲庫中。
有沒有一種方法可以使用GUI或CMD(Macbook)來做到這一點?
我有一個現有的存儲庫,包含Github上的文件夾和文件,並且我剛剛創建了四個新的存儲庫。將文件/文件夾從一個git repo移動到另一個
我希望將現有存儲庫中的文件/文件夾分發到我剛剛創建的新存儲庫中。
有沒有一種方法可以使用GUI或CMD(Macbook)來做到這一點?
我不知道是否有任何方法可以用GUI來完成。
如果你想提取的東西包含在他們自己的文件夾中,在命令行中很容易。使用git filter-branch --subdirectory-filter
一種方法是在這裏解釋說:
https://stackoverflow.com/a/12818479/955926
如果你的文件和文件夾不會這麼好聽包含,或者不匹配的簡單模式(即只保留* .py文件,等等),一個方法 - 我稱之爲「梳理」 - 就是繼續運行簡單的過濾分支命令 - 在克隆上,而不是原始的! - 不斷剝離它的一部分,直到你的歷史只包含你想要的東西。
當然,我們總是希望能夠驗證我們在做什麼。這將顯示所有曾經在您的回購中存在的相關文件/文件夾路徑的排序,uniqued上市:
$ git log --pretty='format:' --name-only | grep -v '^$' | sort -u
讓我們在該列表中你看到你想從歷史走了foo
和bar/baz
文件夾說(即擺脫baz
,這是bar
和foo
):
$ git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch foo bar/baz'
現在可以運行以前log
命令,以驗證這些鏈接沒有任何地方在時間上,較小的列表中存在,並選擇更多的東西擺脫。或者你可以堅持每一個路徑進入一個調用filter-branch。我只是更好地採取更小的步驟和驗證,以同樣的方式,我更舒適地承諾精細。
Filter-branch每次都會進行備份,第二次運行會因其存在而停止。這就是-f
的用途。每當你再次過濾時,你都會覆蓋你的備份,但是沒關係,因爲你是在克隆上做這個(right !?),如果你搞得很糟糕,你總是可以在新的克隆上重做。
最後,您需要清除refs/original/*
表頭,這將指向您在每次傳遞後過濾的分支的最後一個頭。如果你過濾分支master
分支,你會有一個refs/original/refs/heads/master
文件指向主過濾器的舊頭,進行預過濾。當你強制下一個通行證時,你會指向新的通行證。如果由於某種原因,您希望在每次過濾之後都保留指向每個備份的指針,那麼在每次過濾之後,請在這些「原始」參考上放一個分支或標記。或者在過濾之前刪除標籤/分支,或者僅使用reflog。