簡體   English   中英

Git:也在歷史中移動文件

[英]Git: move files in history too

是否有可能使用Git的工具將文件移動到新的文件夾,同時修改其完整的歷史記錄,就好像文件是從他們的第一次添加?

在合並了一些repos之后我想出了這個:我將文件從幾個repos移動到一個“超級”repo中的不同文件夾,但是合並的歷史表現非常糟糕, git rebasegit svn工具因為完全不同的文件可能會碰撞他們的當然是舊址。

所以現在這完成了工作:

git filter-branch --tree-filter '(ls -A; mkdir TheSubdir; echo TheSubdir) | xargs mv'

奇怪但很好:.git目錄停留在應有的位置; 也許git以某種方式阻止它的運動?

要修改完整的歷史記錄,您需要重寫每次提交。 git filter-branch是執行此操作的最佳方式。 特別是,對於您的情況, git filter-branch --tree-filter some-command將檢查您的歷史記錄的每個版本,運行您可以根據需要修改工作樹的命令(例如移動目錄)問題),然后重寫該提交以包含樹的新內容。

對於包含空格等的文件/目錄, 接受的答案中的命令將失敗。以下版本是安全的:

git filter-branch -f --tree-filter 'mkdir TheSubdir; \
find . -maxdepth 1 -name TheSubdir -prune -o -name . -true -o -print0 | \
xargs -0 mv -t TheSubdir'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM