我有一个我在Eclipse工作的Android项目。我在github上为自己创建了一个帐户,并使用GitHub for Mac客户端将项目中的代码推送到在线远程存储库。随后,我对代码做了一些小的提交,一切顺利。
现在代码经历了一些重大更改,当我尝试使用Mac客户端提交时,我在同步时收到以下错误消息:
Sync Failed: Please commit all your changes before syncing.
为了解决这个问题,我尝试了以下方法:
1.试图从命令行使用git push origin/master
。这导致了project/info/refs not found: did you run git update-server-info on the server?
我检查了存储库名称,位置等是否都正确无误。
我的问题:
1.“更改”部分中显示了大量.class
个文件。为什么这些.class文件包含在.gitignore
中,它们会出现?既然已经出现了,是否有必要选择并提交它们?
2.上面的错误信息是什么意思,我该如何摆脱它?
编辑1:
执行以下命令后:
1. git ls-tree -r master | grep .class
- 这表明.class
文件也被添加到存储库中
2. git rm **/*.class
从存储库中删除所有.class
个文件
3. git commit -m "remove class files
4. git push origin master
导致:
fatal: https://github.com/user/project.git/info/refs not found: did you run git update-server-info on the server?
此外,在命令行上运行git status
会显示以下行:
# On branch master
# Your branch is ahead of 'origin/master' by 16 commits.
#
这是否值得关注?
我在这个主题上经历了很多线程并看了一些像SSH-keygen这样的东西,但我不认为这是我的问题的解决方案。我是git的新手,之前只使用过cvs,所以如果可能的话,请愚蠢地回答你的问题。
我的.gitignore
文件:
# built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties
# Eclipse project files
.classpath
.project
# Proguard folder generated by Eclipse
proguard/
# Intellij project files
*.iml
*.ipr
*.iws
.idea/
*.class
*.class
*.class
*.jar
*.class
*.class
bin/dexedLibs/slf4j-android-1.6.1-RC1-e5ffa87f4686586f2e03d9069f131ba3.jar
*.class
答案 0 :(得分:1)
首先需要将提交推送到本地存储库,然后将提交推送到远程存储库。这使您可以非常轻松地与远程存储库进行合并,因为每个提交都有一个唯一的SHA ID,用于指示存储库与远程存储库的关系。
执行以下操作:
git add .
git commit -m "your commit message"
git push origin master (NOT git push origin/master)
修改强>
您是否偶然更改了github存储库的名称?这个SO question应该有所启发。
答案 1 :(得分:1)
您可能已经在存储库中提交了.class文件。在这种情况下,即使将.class放在.gitignore文件中,git也会继续跟踪它们。运行git ls-tree -r master | grep .class
。如果这给出了任何输出,那么你已经提交了.class文件。如果是,请尝试运行git rm **/*.class
并提交更改。
您不应该运行git push origin/master
您需要指定一个遥控器,然后(可选)指定一个分支。现在git将尝试将origin/master
解析为远程。请改用git push origin master
(使用空格而不是/)。 origin/master
是一个你不应该改变自己的分支。
除了你的.gitignore多次使用* .class。多次出现不会改变git的行为。
答案 2 :(得分:0)
'git commit。 '将提交所有更改。
也许你可以试试......(我不确定,只是一个想法)
答案 3 :(得分:0)
问题是我使用个人ID登录了GitHub
的Mac客户端。此个人ID未在项目中注册为合作者。添加我的个人帐户作为协作者(一个丑陋的解决方案)解决了这个问题。我能够将更改提交到存储库。
我觉得有用的其他建议:
- 从存储库中删除.class
个文件
要检查是否正在跟踪.class
个文件:git ls-tree -r master | grep .class
要从回购中删除它们并提交:git rm **/*.class
后跟git commit -m "your message goes here"
推送所有更改:git push origin master
。
为了能够将git
用于多个帐户,我发现this account here非常有用。