【发布时间】:2013-02-20 10:29:00
【问题描述】:
我遇到了一个问题,我不小心将一个目录复制到了它自己的子目录中,从而创建了数千个 git 事务。在尝试清理它失败后,我决定创建一个新项目并从旧项目复制文件。不知何故,我认为我搞砸了,但我不确定问题出在哪里。这是我目前的症状。
我以为我正确初始化了 git 存储库。但是,github上没有任何文件。
https://github.com/victorengel/matchismo2
...除了我在那里创建的。
项目本身是一个 iOS 单视图应用程序,我在启用 git 的情况下创建。我将我需要的所有文件从旧项目复制到新项目区域,确认它运行,然后尝试提交。提交似乎有效,但推送没有。
如果我尝试推送,我会收到一条消息,指出工作副本已过时,我应该进行拉取。如果我尝试拉,它说有未提交的更改,我应该放弃它们或提交它们。经过一番摸索,我发现触发此事件的更改是用户数据更改,应该在 .gitignore 中忽略。
我终于按照需要的方式设置了 .gitignore。我认为存储库是在 github.com 上设置的,但我仍然遇到错误。
我可以提交但不能推送。如果我尝试推送,我会收到消息“工作副本已过期。尝试从远程拉取最新更改,然后再次推送。”
如果我尝试拉取,我会收到消息“matchismo2/master”不是可以从中拉取的有效远程分支。请选择不同的远程分支。
环顾github.com,只有一个分支,victorengel/matchismo2下的master。对我来说,看起来一切都设置正确,但显然我错过了一些东西。这是什么?
在 Xcode 的管理器中,如果我单击分支,则会列出一项:master。 如果我点击 Remotes,有一项,matchismo2,如果我展开它,则会列出 master。
我一直假设这个带有 master 的 matchismo2 应该与错误消息中的“matchismo2/master”相匹配。对我来说看起来很匹配,为什么它不起作用?
编辑: 如果我尝试从 GitHub 应用程序中提取,我会收到一条错误消息“服务器上还没有任何远程分支”。如果我尝试从 GitHub 发布,我会得到以下信息:
git: 'credential-osxkeychain' is not a git command. See 'git --help'.
2013-03-05 16:32:43.680 GitHub for Mac Login[68518:707] AskPass with arguments: (
"/Users/brillig/Downloads/GitHub.app/Contents/MacOS/GitHub for Mac Login",
"Password for 'https://victorengel@github.com': "
)
2013-03-05 16:32:43.763 GitHub for Mac Login[68518:707] Error reading attributes: OSStatus -2033889429
2013-03-05 16:32:43.764 GitHub for Mac Login[68518:707] Error reading attributes: OSStatus -2033889429
2013-03-05 16:32:43.919 GitHub for Mac Login[68518:707] Error reading attributes for password: OSStatus 840183217
git: 'credential-osxkeychain' is not a git command. See 'git --help'.
To https://victorengel@github.com/victorengel/matchismo2.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://victorengel@github.com/victorengel/matchismo2.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
(256)
【问题讨论】:
-
你是不是在复制文件的时候不小心复制了.git目录?
-
没有。我按类别复制了我需要的文件(图像、模型文件、视图文件、控制器文件、情节提要文件),所以这是不可能的。
-
您知道
.gitignore只影响git status和git add的默认值吗?一旦文件被 git 跟踪,git 对它们的了解就会取代任何.gitignore规则。例如,忽略 所有 文件,然后git add只忽略您真正想要跟踪的文件,这种情况并不少见。 -
@WillPalmer,这很有道理,但我不知道这与我的问题有什么关系。
-
@VictorEngel,因此,尽管这些文件位于
.gitignore中,但您看到有关未提交数据的警告的原因是这些文件已经被 git 跟踪(因此不受 @ 的影响987654329@)。不将此作为答案发布,因为听起来您有多个问题,而且我不确定根本原因是什么。