【问题标题】:copy/mv directory to another directory in git将/mv 目录复制到 git 中的另一个目录
【发布时间】:2011-07-28 23:06:16
【问题描述】:

我有一个

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

git mv dir1/ dir2/

我收到了这条消息:

fatal: renaming 'dir1' failed: Permission denied

更新:

我从 git 运行 windows 命令行 http://code.google.com/p/msysgit/
正确的命令是什么?

【问题讨论】:

标签: git directory


【解决方案1】:

也可能是该目录(或其中的文件)正被另一个程序使用,这会阻止您对该文件夹执行任何操作。显然,只在 Windows 上。

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

【讨论】:

  • 这正是我遇到问题的原因。我认为这是一个比接受的答案更好的答案,因为独立于 Git 移动目录会导致您丢失正在移动的目录中任何文件的修改历史记录。除此之外,如果操作系统锁定了目录中的文件,它不会失败吗?
  • 它也解决了我的问题。 TGitCache.exe 是保存该文件夹的进程。我怀疑 TGitCache 会在 git 控制下保存每个文件夹,从而使重命名命令几乎 100% 无法正常工作。
  • 这也解决了我的问题!顺便说一句,我通常使用unlocker 来解锁被进程锁定的文件。
  • 我刚刚杀死了资源管理器进程并重新启动它,
【解决方案2】:

您可以只使用标准的 unix 工具,或任何您的操作系统。所以:

mv dir1 dir2

应该可以。只需确保在完成后将 dir1 和 dir2 添加到暂存区域,以便提交更改。

如何提交更改(一旦完成)的示例可能是:

git add dir1 dir2 && git commit dir1 dir2

可能还有其他方法可以做到这一点。

【讨论】:

  • 我很确定你会丢失独立于 Git 移动的文件的修改历史。
  • @Ghodmode:不,git 是基于内容的,并且会根据文件内容进行重命名检测。
【解决方案3】:

源目录和目标目录都需要检入 git 存储库。如果您将 dir1 移动到 dir2 并且 dir2 尚未提交,您将收到此错误消息。

【讨论】:

    【解决方案4】:

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

    如果您在运行git status 时看到目录中未跟踪的文件被重命名,那么您将不得不暂时将这些文件移到其他地方并在git mv 之后将它们重新带回。

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题。 TGitCache.exe 是阻止重命名文件夹的进程。使用 TaksExplorer,我已经终止了该进程并从 Git Bash 命令提示符运行命令。

      【讨论】:

        猜你喜欢
        • 2014-07-18
        • 2013-01-11
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 2012-12-03
        • 2013-08-15
        相关资源
        最近更新 更多