ChatGPT解决这个技术问题 Extra ChatGPT

在 Git 存储库中,如何正确重命名目录?

我认为将要重命名的目录复制到具有所需名称的新目录,以及 delete the old directorygit addgit commitpush 一切都应该有效。但这是最好的方法吗?

就 Git 而言,复制和删除与移动是一回事。 Git 将以相同的方式记录(复制+删除)和(移动)。

C
Community

基本重命名(或移动):

git mv <old name> <new name>

区分大小写的重命名 - 例如。从 casesensitiveCaseSensitive - 您必须使用两步:

git mv casesensitive tmp
git mv tmp CaseSensitive

(More about case sensitivity in Git…)

…其次是提交和推送将是在 git repo 中重命名目录的最简单方法。


但如果您想从 casesensitive 重命名为 CaseSensitive,您可以这样做:git mv casesensitive Temp 然后 git mv Temp CaseSensitive
它是否保存所有日志和统计信息?
@ViliusK 如果您正在处理区分大小写的目录,我发现的任何简单方法都是 git rm -rf --cached path/to/your/directories 然后重新添加并提交
但是为什么 GIT 对包/目录的名称更改没有适当的支持?为什么我什至需要创建一个单独的文件夹。当我更改包的名称时,它不应该将其视为差异并在提交和推送时处理它吗?
非常感谢。对我来说,我必须先执行 git config core.ignorecase false,然后连续运行命令,否则,对于第二部分,我会收到 source is empty 错误。
S
SliverNinja - MSFT

如果您收到此错误:致命:重命名“文件夹名”失败:参数无效

尝试这个:

*尼克斯操作系统

git mv foldername tempname && git mv tempname folderName

操作系统

git config core.ignorecase false; git mv foldername tempname; git mv tempname folderName


这正是我在目录中进行大小写更改所需要的。
标记“&&”在此版本中不是有效的语句分隔符。 git 版本 2.11.0.windows。
@Tim Hardy 它也可以作为两个单独的命令运行,git mv foldername tempnamegit mv tempname folderName,它们应该可以在 Windows 上运行。
这不起作用!最终结果会将新的 'folderName' 文件夹放入 'tempname' 文件夹中
a
akshay_rahar

1.将文件夹的名称从旧文件夹更改为新文件夹

git mv oldfolder newfolder

2. 如果 newfolder 已经在您的存储库中并且您想覆盖它并使用:- 强制

git mv -f oldfolder newfolder

不要忘记将更改添加到索引并在使用 git mv 重命名后提交它们。

3. 在不区分大小写的文件系统上将文件夹名重命名为文件夹名

使用普通 mv 命令(不是 git mv)进行简单重命名不会被识别为来自 git 的文件更改。如果您尝试使用 'git mv' 命令,如下行所示

git mv foldername folderName

如果您使用的是不区分大小写的文件系统,例如您在 Mac 上并且没有将其配置为区分大小写,您将遇到如下错误消息:

致命:重命名“文件夹名”失败:参数无效

为了使它发挥作用,您可以采取以下措施:-

git mv foldername tempname && git mv tempname folderName

这通过首先将文件夹重命名为完全不同的文件夹名称来拆分重命名过程。将其重命名为不同的文件夹名称后,该文件夹最终可以重命名为新的文件夹名称。在那些 'git mv' 之后,不要忘记添加并提交更改。虽然这可能不是一个漂亮的技术,但它工作得非常好。文件系统仍然无法识别字母大小写的变化,但是由于将其重命名为新的文件夹名称,git 确实如此,这就是我们想要的 :)


C
Chan

您可以使用文件系统重命名目录。然后您可以执行 git rm <old directory>git add <new directory> (Help page)。然后你可以提交和推送。

Git 会检测到内容相同,只是重命名操作,会在历史记录中显示为重命名条目。您可以使用 git status 在提交之前检查是否是这种情况


嘿,但是这样,我会丢失整个提交历史。
如果您使用 -follow 标志,您可以保留它。
两个命令而不是一个,并且必须添加一个标志?这在任何方面都比 git mv 好吗?
@topper 不, git mv 只是 rm+add 的别名。使用 git mv 是一个更好的解决方案。
@topper 请注意,无论您使用哪种方法移动文件,您仍然必须使用 --follow 来查看历史记录。
Y
Yinon

很多正确的答案,但是当我登陆这里复制并粘贴带有历史记录的文件夹重命名时,我发现这个

git mv <old name> <new name>

将旧文件夹(本身)移动到新文件夹中

尽管

git mv <old name>/ <new name>

(注意'/')会将嵌套内容从旧文件夹移动到新文件夹

这两个命令都没有复制嵌套文件的历史记录。我最终分别重命名了每个嵌套文件夹✔

git mv <old name>/<nest-folder> <new name>/<nest-folder>

S
SyncroIT

从 Web 应用程序我认为你不能,但你可以重命名 Git 客户端中的所有文件夹,它会将你的文件移动到新重命名的文件夹中,而不是提交并推送到远程存储库。

我有一个非常相似的问题:我不得不将不同的文件夹从大写重命名为小写(如 Abc -> abc),我用虚拟名称(如“abc___”)重命名了所有文件夹,然后提交到远程存储库,之后我将所有文件夹重命名为带有小写字母的原始名称(如 abc),然后它们就被占用了!


R
Ryan Walker

对于区分大小写的重命名,git mv somefolder someFolder 以前对我有用,但由于某种原因今天没有。因此,作为一种解决方法,我创建了一个新文件夹 temp,将 somefolder 的所有内容移动到 temp,删除 somefolder,提交 temp,然后创建 someFolder,移动 temp 的所有内容} 到 someFolder,删除 temp,提交并推送 someFolder,它工作!在 git 中显示为 someFolder


Imo 我们真的不需要临时文件夹,需要的步骤: 1. 将 somefolder 重命名为任何其他名称(例如 somefolder1) 2. 提交并推送更改 3. 将 somefolder1 重命名为 someFolder 4. 提交并推送更改
S
Shamshad Zaheer

我尝试使用以下命令,但没有成功。我收到 fatal: renaming '...' failed: Invalid argument 错误。

git mv oldName NewName

然后用下面的方法解决:

首先我复制我想重命名的文件夹然后我运行以下命令来删除文件夹

git rm oldName -r

将重复的文件夹重命名为 NewName


M
Mehboob Ali

请注意,除非您提供完整的文件夹路径,否则接受的答案将不起作用。否则,你会得到致命的:坏源错误。


这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review
C
Community

只需重命名文件夹。 git 是一个“内容跟踪器”,所以 SHA1 哈希是相同的,git 知道,你重命名它。唯一改变的是树对象。

$ rm <directory> // remove the directory
$ git add . // add changes to the git
$ git commit // commit removed directory

这并不总是有效。它肯定对我不起作用。像 20% 的文件...