EGit - проблеми с извличане, сливане, изтегляне

Добре, ето какво става.
Имам инсталиран Git на моя отдалечен сървър Debian (lenny). Версията на Git е 1.5.6.5. Възнамерявам да го използвам като отдалечено споделено/резервно хранилище.
Машината ми за разработка работи с Windows, където е моят Eclipse с EGit. Ето какво направих:

  • Създаден споделен потребител за git.
  • Настройте SSH (в Eclipse и на сървъра), обменихте публични ключове и т.н., всичко мина добре.
  • Създадох отдалечено репо и го инициализирах с git --bare init.
  • Създаден проект в локално репо, направи няколко промени и ангажименти, успешно.
  • Преместен главен клон от локално репо към отдалечено главно. Дотук добре.
  • (В допълнение, на трета машина клонирах отдалеченото репо (чрез импортиране на EGit) без никакви проблеми.)

„Странните“ неща започнаха, когато изтрих няколко файла от проекта, комитирах и след това се опитах да изтегля от дистанционно, очаквайки да възстановя изтрити елементи, тъй като последната моментна снимка, която беше насочена към отдалечено, имаше всички файлове. Тъй като pull по същество е fetch + merge, изглежда, че EGit има известни проблеми по отношение на стратегията за сливане. Въпреки това конфигурирах извличане, което доведе до следната спецификация за извличане:

refs/heads/master:refs/remotes/amrtest1/master

Извличането мина добре, поне изглеждаше така, беше създадена нова папка в локалното хранилище за отдалечения главен клон и забелязах, че FETCH_HEAD също е там.
С изваден локален главен клон се опитах да се слея с отдалечения главен клон ... Резултатът беше:

  • Локално изтритите файлове не бяха възстановени.
  • в перспективата за синхронизиране можех да видя липсващите файлове (в изходящия режим?)
  • В изгледа на историята на EGit действието по извличане беше хронологично преди локалния комит (след изтриване на файлове), което със сигурност не е правилно.

Правя ли нещо нередно тук? Невалидни ли са очакванията ми за възстановяване на състоянието въз основа на описания процес? Ако е така, какъв би бил начинът (да се възстанови състоянието на дистанционното репо или поне да се слее правилно със съществуващото локално)?

Благодаря.


person Less    schedule 15.06.2012    source източник


Отговори (1)


Да, очакванията ви са грешни. Всъщност отне няколко препрочитания, преди да разбера, че сте вярвали, че Git по някакъв начин психически ще открие, че не искате да изтриете файловете, които сте изрично изтрили и да ги възстановите по време на операцията по сливане. Ако искате файловете обратно, трябва или да върнете ангажимента, който ги е премахнал, или да копирате файловете от версията, в която са съществували, във вашата текуща версия.

На всичкото отгоре, ако сте прави за това, което наричате „изглед на историята на EGit“, това вероятно означава, че сте задали изтегляне да извършва rebase вместо merge така или иначе. При rebase грубо се приема, че вашите промени от последното изтегляне трябва да се приложат като спрямо текущата версия на upstream. Това често е по-ясно за разбиране от другите, но може да бъде объркващо или да се провали директно, ако много хора променят същия или свързан код през това време.

person tialaramex    schedule 15.06.2012
comment
само за да бъде ясно - НЕ направих тегленето, тъй като не работи bugs.eclipse.org/bugs/show_bug.cgi?id=362206 Освен това, не направих нищо, което да споменава rebase, освен ако EGite направи това без да знам. Под изглед на хронология на EGit имам предвид раздела История, който се показва, когато щракнете с десния бутон върху проекта, Екип › Покажи хронология. Ще трябва да проуча повече, преди да приема този отговор - person Less; 15.06.2012