我想在Git中重命名/移动项目子树
/project/xyz
Run Code Online (Sandbox Code Playgroud)
至
/components/xyz
Run Code Online (Sandbox Code Playgroud)
如果我使用普通的git mv project components,那么所有的提交历史xyz project都会丢失.有没有办法移动这个以保持历史?
维基百科解释了自动重命名检测:
简而言之,给定修订版N中的文件,修订版N-1中的同名文件是其默认祖先.但是,当修订版N-1中没有同名文件时,Git会搜索仅存在于修订版N-1中的文件,并且与新文件非常相似.
重命名检测显然归结为类似的文件检测.这个算法记录在哪里吗?很高兴知道自动检测到哪种变换.
我想将 git 存储库中的所有内容向上移动一级,并且需要将其应用于我拥有的每个分支。从字面上看,我有:
+--repo
+----+.git
+----+folder
+--------+ A
+--------+ B
Run Code Online (Sandbox Code Playgroud)
我只想:
+--repo
+----+.git
+----+A
+----+B
Run Code Online (Sandbox Code Playgroud)
这篇文章如何将所有 git 内容在文件夹层次结构中向上移动一级?有一个很好的答案,建议这样做:
git mv folder/* ./ -k
Run Code Online (Sandbox Code Playgroud)
现在我如何处理所有分支?我能想到:
为主人做git mv,然后git rebase为所有人,在主人上
git mv为所有分支做吗?
一个比另一个有优势吗?我也看到了一些基于git filter-branch --index-filter(answer here ) 的答案,但不明白如何将其应用于我的案例。
谢谢!
我有一个具有以下文件夹结构的本地Git存储库。
kronos
|-- org_maps
| |-- attach_departments.ahk
| `-- attach_jobs.ahk
|-- org_sets
| `-- create_org_sets.ahk
`-- labor_level_sets
`-- create_labor_sets.ahk
Run Code Online (Sandbox Code Playgroud)
我想通过将根文件夹上移一层来扩展Git存储库的范围。
scripts
|-- kronos
| |-- org_maps
| | |-- attach_departments.ahk
| | `-- attach_jobs.ahk
| |-- org_sets
| | `-- create_org_sets.ahk
| `-- labor_level_sets
| `-- create_labor_sets.ahk
`-- peoplesoft
`-- kronos
`-- add_elig_departments.ahk
Run Code Online (Sandbox Code Playgroud)
我已经阅读了如何移动git存储库的根目录?,但最重要的答案是重写历史记录,我想避免这种情况。
如何在不重新定位现有文件和子文件夹的情况下将git存储库的根目录上移一个级别?