16

我按照本教程将 SVN 存储库转换为 Git 。现在似乎无法像此答案中建议的那样提取子存储库。

请原谅这篇长篇文章,但大部分文本都是格式良好的 git 输出。

操作系统:Windows 8 命令行:MinGW Git 版本:1.8.1.msysgit.1

除非您有一个干净的暂存区并且没有修改过的文件,否则提取子存储库的过程似乎不起作用。

git status告诉我我有一个修改过的文件,即使这是一个新的 SVN 导入。好吧,让我们试着摆脱它。

尝试还原文件。

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

user$ git checkout -- "folder with space/folder/toolbar.png"

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

这没有用,但我真的不在乎我是否提交它,所以我接下来会尝试。

user$ git commit -a -m "Testing if committing fixes it"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

通过跳过暂存进行提交是行不通的,所以让我们先尝试暂存它。

user$ git add "folder with space/folder/toolbar.png"

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

不起作用,所以我很难过......去问问更聪明的人。

我是 git 新手,但对 Hg 很熟悉,并且一直在阅读这个在线教程来帮助自己入门。

我完全有可能搞砸了一个简单的命令。

已经尝试过: 我四处寻找解决我的特定问题的方法,但运气不佳。我偶然发现了这个似乎相关但并不能完全解决我的问题的答案。

编辑:可能有趣的事情 这是让我感到困惑的部分。不久前,我已将此 repo 推送到在线存储库中。重新克隆后,repo 仍然认为文件已修改(即git status返回相同的结果,并且我已经设置git config --global core.autocrlf false并通过运行git config --global core.autocrlf确实返回 false 进行验证)。

编辑 2:找到了修复,但问题仍然不明白 我已经设法通过简单地从系统中删除文件、暂存区域然后提交更改来修复存储库。在此之后要取回文件,我只需将其复制回来并将其提交到存储库。

这个问题虽然已经解决,但只会让我更加困惑。

当我在删除文件时,我注意到如果我将存储库重置为 HEAD,其最后一次提交已删除文件, git status 将指示没有任何更改并且文件未被跟踪但文件将被恢复在我的工作树中。考虑到它在 git 中被标记为已删除,这很奇怪......

只有在第二次删除它之后,即使 git 不再记得它,我才设法真正删除它,这样git resetgit reset --hard不会恢复文件。

如果有人可以解释我是如何进入这种状态的,如果它是 git 中的错误或正常行为,我将不胜感激。

我的怀疑是 我丢失了我使用的命令序列,但发生的事情是这样的:文件是Images/toolbar.png,我已经导航到Images文件夹中。

在我从文件系统中删除它之后,git 检测到了这样的变化:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted: toolbar.png
#       deleted: ../images/toolbar.png
#

images请注意文件夹没有大写的事实!这是在忽略路径大小写的 Windows 中运行的。我怀疑这可能是问题的一部分......

我真的很困惑,但我的问题已经消失了。所以这篇文章只是作为一种好奇心,尽管我无法在某个地方复制它在从 SVN 转换中存在的行为。

4

2 回答 2

9

不久前我有一个类似的问题。

这个文件的大小写或它所在的目录是否在任何时候都发生了变化?

我有一个大写字母的目录,它被改为全小写(假设它从 t/Foo变为/foo)。它给了我你描述的所有相同的问题。

每当我修改文件时,它都会给我类似的输出:

#       modified: bar.txt
#       modified: ../Foo/bar.txt

我也有同样的问题,提交或重置没有产生任何结果。

我认为问题的原因是 Windows 文件路径不区分大小写,但 Unix 是。由于许多命令行工具(如 Git)是在 Unix-y 系统上开发的,它们有时不能很好地处理这种差异,并且当文件添加Foo/bar.txtfoo/bar.txt. 我认为这让 Git 认为有两个不同的文件,实际上只有一个。

我的最终修复与您的相同,从历史记录中删除整个目录,然后重新添加它(并且永远不会再更改大写字母)。这也引起了你描述的同样的奇怪,我不得不在它之前把它删除两次。

无论如何,我知道这不是一个明确的答案,但我已经能够重现这个问题,所以我很确定这是导致它的原因(至少对我来说)。

于 2013-09-07T09:21:54.620 回答
4

我遇到了类似的问题,原因是两个文件与我的计算机看到的名称相同。

我不断收到的消息:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   images/contact_seller.GIF
#

发生这种情况是因为 repo 的初始提交是从格式化区分大小写的 MacBook 完成的,并且错误出现在格式化不区分大小写的 iMac 上。

在区分大小写的机器上,您可以看到两个文件

SwedishChef$ ls images/contact_seller*
images/contact_seller.GIF   images/contact_seller.gif

这在第二台机器上是无效的,所以 git 不得不做一些事情。

我只需要重命名文件并提交这些更改。

于 2014-01-24T21:46:47.877 回答