Почему git сообщает «актуально» после git pull?

Что я здесь делаю неправильно с тем, что должно быть простой синхронизацией между устройствами и пультом?

Я просмотрел другие ответы здесь и оказался более запутанным, попробовав некоторые из предложенных решений. Это должно быть что-то действительно простое.

Сценарий:

что я пытаюсь сделать:

Я хочу синхронизировать локальную копию базы данных kdbx между несколькими устройствами. Для целей этого обсуждения я просто определю два устройства, используемых локально, и мой удаленный репозиторий Git на сервере gitea:

  1. Мой сервер Gitea (назовем его gitea.host)

На удаленном Git-сервере создан пустой репозиторий с именем kdbx.

  1. Мой ноутбук/настольный компьютер (назовем его ноутбук)

KeePassXC и сопутствующий подключаемый модуль браузера были установлены в Firefox на ноутбуке. Также установлен гит.

KeePassXC использует базу данных joeuser.kdbx.

  1. Мое устройство Android (назовем это устройство android)

KeePassDX установлен на Android. У меня также установлен Termux.

Начальная настройка:

  • На android мы открываем termux и выполняем следующее:
pkg install git
pkg install vim
cd storage/shared
mkdir private/keys
cd private/keys
git config --global user.name "joeuser"
git config --global user.email "[email protected]"
git clone https://gitea.host/joeuser/kdbx.git

Откройте KeepassDX, выберите joeuser.kdbx и проверьте... Все записи есть и он работает.

  • На ноутбуке мы выполняем следующее:
cd /home/joeuser
mkdir private/keys
cd private/keys
git config --global user.name "joeuser"
git config --global user.email "[email protected]"
git clone https://gitea.host/joeuser/kdbx.git

переместите joeuser.kdbx из любого места в /home/joeuser/private/keys/kdbx

Откройте KeepassXC, подключитесь к /home/joeuser/private/keys/kdbx/joeuser.kdbx и проверьте... Все записи есть и все работает.

Добавьте новую запись в базу данных на «ноутбуке» и синхронизируйте с удаленным:

На самом деле не имеет значения, какое устройство мы используем первым, но в этом примере мы начнем с ноутбука.

ПРИМЕЧАНИЕ. Мы также установили подключаемый модуль браузера KeePassXC, который будет использоваться здесь.

  1. Откройте KeePassXC, разблокируйте базу данных, joeuser.kdbx
  2. Откройте браузер (например, Firefox) и посетите сайт, например, https://joeuser.com.
  3. Войдите в систему, и плагин браузера спросит, хотите ли вы добавить комбинацию uid/pwd в новую запись и согласитесь.
  4. Вернитесь в KeePassXC и убедитесь, что в базе данных kdbx появилась запись. Все выглядит хорошо.
  5. Переместите базу данных в удаленный источник:
git add .
git merge -m "added entry in kdbx"
git push

синхронизировать «андроид» с пультом:

1. Откройте termux и выполните следующие действия:

cd storage/shared/private/keys/kdbx
git pull
  1. Откройте KeePassDX и подключитесь к базе данных private/keys/kdbx/joeuser.kdbx.
  2. проверьте логин для joeuser.com, и он там есть.
  3. Вернитесь в KeePassDX, добавьте еще одну запись uid/pwd в базу данных.
  4. в сеансе termux выполните:
git add .
git merge -m "added another entry in db"
git push

В этот момент все резко останавливается. нажатие, извлечение с любого локального устройства приводит к сообщениям от Git, в которых говорится:

Already up to date для тяги и Everything up to date для толчка.

Проблема! Как решить?

Я хотел смоделировать это на основе того, как pass работает на рабочих станциях UNIX/Linux, а его эквивалентная комбинация Password Store и OpenKeyChain работает на Android. . По сути, pass использует git для синхронизации между частным репозиторием моего удаленного сервера Gitea, и все, что мне нужно сделать при использовании ноутбука или android, — это вытащить в меню настроек и выберите синхронизацию - вуаля! Теперь устройство синхронизировано с удаленным репозиторием и каждый раз работает безупречно.

Что я здесь делаю неправильно? Как я могу решить эту проблему и получить функциональность, которую я хочу использовать?

У меня никогда не было проблем до использования git с локальными и удаленными репозиториями, но опять же, за исключением pass/Password Store/OpenKeyChain, я всегда работал с командой, в которую входили другие и никогда на самом деле все, что было связано с получением моих собственных обновлений с удаленного компьютера (потому что, по определению, они у меня уже были), если только я не переходил на новое устройство. Я получал вклад всех остальных, как и ожидалось.


person tallship    schedule 21.07.2020    source источник
comment
Если зафиксированный файл изменен, ничего о том, какие изменения имеют отношение к вопросу... и он действительно скрывает фактический вопрос/проблему, для которой были бы полезны такие детали, как список удаленных коммитов и т. д.   -  person user2864740    schedule 21.07.2020
comment
В любом случае, попробуйте «git fetch — all», затем «git log — all». Я ожидаю, что коммиты будут видны. Они должны отражать все, что показывает сервер gitea (есть ли у него пользовательский интерфейс?).   -  person user2864740    schedule 21.07.2020
comment
Вместо git merge -m "added another entry in db" вы хотели запустить git commit -m "added another entry in db"?   -  person ElpieKay    schedule 21.07.2020
comment
git pull означает выполнить git fetch, затем запустить вторую команду Git, обычно git merge. Команда git merge говорит, что уже обновлена, потому что вы в курсе. Одного слияния достаточно: другое не сделает больше. Как предложил ElpieKay, может быть, вы хотели использовать git commit?   -  person torek    schedule 21.07.2020


Ответы (2)


Одна эффективная настройка для облегчения синхронизации с Git 2.6+:

git config --global pull.rebase true
git config --global rebase.autoStash true

Затем в любой момент достаточно простого git pull, чтобы:

  • спрячьте свою работу в процессе
  • принести
  • перебазируйте любую локальную фиксацию поверх обновленной восходящей ветки
  • восстановить вашу работу в процессе

Оттуда вы можете git add + git commit + git push.

person VonC    schedule 21.07.2020

Попробуйте проверить на устройстве после внесения изменений с помощью git status какие файлы изменились.

Если git status показывает правильные изменения, убедитесь, что вы находитесь в корневом каталоге репозитория, когда вызываете git add . или вводите напрямую git add <relative path to file>.

После этого можно указать коммит вызовом git commit -m "<your message>"

Теперь попробуйте нажать git push здесь и потянуть эту ветку на другом устройстве.

person DoPaNik    schedule 21.07.2020