将目录在Git中复制/移动到另一个目录

21

我有一个

dir1/ 目录包含许多文件和子目录,我想将该目录名称更改为 dir2/。我尝试了

git mv dir1/ dir2/

然后我得到了这个消息:

fatal: renaming 'dir1' failed: Permission denied

更新:

我在Git for Windows命令行中运行了http://code.google.com/p/msysgit/
正确的命令是什么?


你使用哪个操作系统来执行这些命令? - dwmcc
我从 Windows 命令行中运行了 git,网址为 http://code.google.com/p/msysgit/。 - icn
5个回答

20

可能是因为该目录(或其中的某个文件)正在被其他程序使用,这会阻止您对该文件夹进行任何操作。仅限于Windows操作系统。

如果您不确定哪个程序占用了该目录/文件,请使用Process Explorer


这正是我的问题所在。我认为这是一个比被接受的答案更好的答案,因为独立于Git移动目录将导致您丢失要移动的目录中任何文件的修改历史记录。此外,如果操作系统锁定了目录中的文件,它不会失败吗? - Vince
它也解决了我的问题。TGitCache.exe是持有文件夹的进程。我怀疑TGitCache会持有git控制下的每个文件夹,使得重命名命令几乎100%无法工作。 - Vivian De Smedt
这也解决了我的问题!顺便说一下,我通常使用 unlocker 来解锁被进程锁定的文件。 - ingomueller.net
我刚刚结束了资源管理器进程并重新启动了它,哇啦 - Olumide

10

你可以直接使用标准的Unix工具,或者你所使用的操作系统提供的工具。因此:

mv dir1 dir2

应该可以正常工作。只需确保在此操作完成后将dir1和dir2都添加到暂存区,以便您可以提交更改。

提交更改的示例(完成后)可能是:

git add dir1 dir2 && git commit dir1 dir2

可能还有其他方法可以实现。


4
我相信,无论是否使用 Git,您将丢失移动文件的修改历史记录。 - Vince
3
不,Git是基于内容的,并且根据文件内容进行重命名检测。 - user518450

2

源目录和目标目录都需要被提交到 git 仓库中。如果你想将 dir1 移动到 dir2,而 dir2 还没有被提交,你会收到这个错误信息。


0

我曾经遇到过同样的问题。TGitCache.exe是阻止文件夹重命名的进程。我使用任务管理器结束了该进程,并在Git Bash命令提示符下运行了命令。


0

我在cygwin中运行git。在我从要重命名的目录中删除未跟踪的文件之前,我遇到了同样的问题。这允许git mv正确完成。

如果您在运行git status时看到要重命名的目录中有未跟踪的文件,则必须将这些文件暂时移动到其他地方,并在git mv之后再将它们带回来。


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