Git - 将文件内容移动到另一个目录

4

如何将目录或单个文件的内容移动到另一个目录?

我执行了以下命令:git mv Jarryd/movementcommands.c src

得到如下错误:fatal: not under version control, source=Jarryd/movementcommands.c, destination=src/movementcommands.c

应该这样移动:git mv Jarryd/movementcommands.c src/movementcommands.c

4个回答

3

这两种形式都可以工作,但由于您的源文件不受git控制,所以您不需要使用git mv命令,只需进行简单的移动和添加即可。(我假设Jarryd和src都在您的git工作树中。)

mv Jarryd/movementcommands.c src
git add src/movementcommands.c

3
你确定 Jarryd/movementcommands.c 文件或 src 文件夹被 Git 追踪了吗?
无论如何,你可以尝试执行以下命令: mv Jarryd/movementcommands.c src
git add src/movementcommands.c

1

确保源目录和目标目录都在git版本控制下,就像错误信息所说的那样。

此外,如果您尝试将某些内容移出git子模块,则可能无法正常工作。我认为git并不是为了跟踪这个而设计的。(如果您不知道本段话的含义,则不适用于您。)


1
注意,在 Git 2.29(2020年第4季度)之前, "git mv src dst(man)" 当 src 是一个未合并的路径时,会正确报错但错误地显示错误信息声称 src 未被跟踪。

意思是 fatal: not under version control 并不总是表示“未跟踪”。

请查看 2020年7月20日由{{link2:Chris Torek (chris3torek)提交的提交9b906af
(于2020年7月30日由Junio C Hamano -- gitster --提交be2dab9中合并)

git-mv:改进冲突文件的错误消息

署名作者:Chris Torek

'git mv(man) ' has always complained about renaming a conflicted file, as it cannot handle multiple index entries for one file. However, the error message it uses has been the same as the one for an untracked file:

fatal: not under version control, src=...  

which is patently wrong.
Distinguish the two cases and add a test to make sure we produce the correct message.

如果您在合并/变基过程中移动具有冲突的文件,则新的错误提示消息将是:
fatal: conflicted

这比以下更好:

fatal: not under version control

然而...
Git 2.31.1 (2021年第一季度)修复了 "git mv"(man) 在大小写不敏感系统上的一个边缘情况 bug,该 bug 是在2.29时期引入的。
2.29/2.30/2.31问题的示例:
c:\git_CAP\repo_MFW2>git mv mfw2/application/phaseCalc_IQ_Xiong.hpp PC_phaseTest/phaseCalc_IQ_Xiong.hpp
Assertion failed: pos >= 0, file builtin/mv.c, line 295

请查看提交 93c3d29(2021年3月1日)由Torsten Bögershausen (tboegi)完成。
(由Junio C Hamano -- gitster --合并于提交 ef486a9,2021年3月19日)

93c3d297b5:git mv foo FOO ; git mv foo bar

报告人: Dan Moseley
签署者: Torsten Bögershausen

在不区分大小写的文件系统上(严格来说,使用core.ignorecase=true),以下序列会导致断言失败并留下.git/index.lockgit init(man) echo foo >foo git add(man) foo git mv(man) foo FOO git mv foo bar 这个回归是在提交9b906af中引入的(git-mv:改进冲突文件的错误消息,2020-07-20,Git v2.29.0-rc0 -- merge列在batch#1中)。
修复错误的方法是将“索引中的文件存在不区分大小写”更改为正确的“索引中的文件存在(区分大小写)”。
这避免了代码后面的“assert”,并保持设置下一个else if中完成的ce_stage(ce)的"ce"指针。
这修复了git-for-windows/git issue 2920

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接