Не удается отправить коммиты в удаленный репозиторий — GitHub

У меня есть проект Android, над которым я работал в Eclipse. Я создал для себя учетную запись на github и отправил код проекта в удаленный онлайн-репозиторий с помощью клиента GitHub для 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?
2. Я проверил правильность имени репозитория, местоположения и т. д., и они были правы.

Мои вопросы:
1. В разделе «Изменения» отображается большое количество .class файлов. Почему они появляются, если файлы .class включены в .gitignore? Теперь, когда они появились, нужно ли их тоже выбирать и фиксировать?
2. Что означает сообщение об ошибке выше и как от него избавиться?

EDIT 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

person Sriram    schedule 09.09.2013    source источник
comment
каков результат git remote show origin?   -  person g19fanatic    schedule 09.09.2013
comment
Это снова fatal:... update-server-info. Это частный репозиторий. Это имеет значение?   -  person Sriram    schedule 09.09.2013


Ответы (4)


Возможно, вы уже зафиксировали файлы .class в репозитории. В этом случае git будет отслеживать их, даже если вы поместите *.class в файл .gitignore. Выполнить git ls-tree -r master | grep .class. Если это дает какой-либо результат, вы зафиксировали файлы .class. Если это так, попробуйте запустить git rm **/*.class и зафиксируйте изменение.

Вы не должны запускать git push origin/master, вам нужно указать удаленный, а затем (необязательно) ветку. Теперь git попытается разобрать origin/master как удаленный. Вместо этого используйте git push origin master (используйте пробел, а не /). origin/master — это ветка, которую вы все равно не должны менять самостоятельно.

Кроме того, у вас несколько раз есть *.class в вашем .gitignore. Многократное вхождение не изменит поведение git.

person Honril Awmos    schedule 09.09.2013
comment
Ты был прав. файлы .class добавлялись в репо. Я удалил их, как вы предложили. Однако использование git push origin master по-прежнему не работает. Я все еще получаю ошибку update-server-info. - person Sriram; 09.09.2013
comment
@Sriram Что выводит git remote -v? Вы переименовали репозиторий на github? - person Honril Awmos; 09.09.2013
comment
git remote -v выводит: origin https://github.com/englishhelper/BlueBottle.git (fetch) origin https://github.com/englishhelper/BlueBottle.git (push) А зачем мне проект переименовывать? - person Sriram; 09.09.2013
comment
Вам не нужно переименовывать репозиторий. Но если вы это сделали, это может быть причиной ошибки. Я не могу найти ваш репозиторий на github. Это означает, что он либо частный (и вы платите за свою учетную запись github), либо не существует. Что бы объяснило, почему вы получаете ошибку. - person Honril Awmos; 09.09.2013
comment
@Sriram взгляните на ​​stackoverflow .com/questions/12406963/ Что-то не так со ссылкой на репозиторий. Возможно, вы его не создали, неправильно набрали, перевели что-то в нижний регистр... К сожалению, я не могу это проверить, так как это частный репозиторий. - person Honril Awmos; 09.09.2013
comment
Я понял. Я пытался внести изменения в репозиторий, используя имя пользователя, которое не было указано в качестве соавтора проекта. отсюда и ошибки. что подводит меня к моему следующему вопросу: как мне управлять несколькими пользователями в git? - person Sriram; 09.09.2013

Сначала вам нужно отправить коммиты в локальный репозиторий, а ЗАТЕМ отправить коммиты в удаленный. Это позволяет вам очень легко выполнять слияния с удаленным репозиторием, поскольку каждая фиксация имеет уникальный идентификатор SHA, который используется для указания, где находится ваш репозиторий по отношению к удаленному репо.

сделайте следующее:

git add .
git commit -m "your commit message"
git push origin master    (NOT git push origin/master)

ИЗМЕНИТЬ

Вы случайно не изменили имя репозитория github? Этот SO вопрос должен пролить немного света.

person g19fanatic    schedule 09.09.2013
comment
Я попытался внести изменения в удаленное репо, используя git push origin master, но все равно получил ошибку update-server-info, как указано выше. Не могли бы вы также увидеть вопрос для редактирования? - person Sriram; 09.09.2013

' git совершить . ' зафиксирует все ваши изменения.

Может быть, вы можете попробовать это... (я не уверен, просто идея)

person BENARD Patrick    schedule 09.09.2013
comment
Как зафиксировать изменения в удаленном репозитории? Я думаю, что это будет зафиксировано только в локальном репозитории, верно? - person Sriram; 09.09.2013
comment
Кроме того, если я использую эту команду, я получаю все .class и файл R.java в измененном разделе, файлы, которые должны были быть проигнорированы в соответствии с .gitignore. - person Sriram; 09.09.2013
comment
Можете ли вы опубликовать gitignore? На самом деле, если есть строка с '.class', она не должна обрабатывать эти файлы... - person BENARD Patrick; 09.09.2013
comment
Оки, а твой удаленный gitignore такой же? - person BENARD Patrick; 09.09.2013
comment
Да, они такие же. - person Sriram; 09.09.2013

Проблема заключалась в том, что я вошел в клиент Mac GitHub, используя личный идентификатор. Этот личный идентификатор не был зарегистрирован как соавтор проекта. Добавление моей личной учетной записи в качестве соавтора (уродливый обходной путь) решило проблему. Я смог зафиксировать изменения в репозитории.

Другие предложения, которые мне показались полезными:
- Удаление .class файлов из репозитория.
Чтобы проверить, отслеживаются ли .class файлов: git ls-tree -r master | grep .class
Чтобы удалить их из репозитория и зафиксировать: git rm **/*.class, а затем git commit -m "your message goes here"
Чтобы отправить все изменения: git push origin master.

Чтобы иметь возможность использовать git с несколькими учетными записями, я нашел эта учетная запись очень полезна.

person Sriram    schedule 09.09.2013