VS 2015 s Git - merge tools nepracuje správně rubrika: Nástroje: Verzování
Dobrý den
Ve firmě jsem z TFS přešli na Git.
Hlavní repositář je na serveru, kde je repositář bez pracovní verze.
Programátoři mají VS2015 s integrovaným nástrojem na git a připojujeme se k repositáři přes UNC cestu. Každý má na svém počítači lokální verzi toho co je na serveru a potom vlastní větve.
A problém který nám komplikuje práci.
Nástroj, který spojuje změněné soubory se soubory na serveru (nebo v jiné větvi) někdy ignoruje změny a nezapíše je.
Uvedu příklad.
Já i kolegyně provede nad repositářem SYNC, aby jsme měli aktuální verzi, která je na serveru. Pak si založíme lokální větev, ve které budeme provádět změny a budeme oba měnit ty samé soubory.
Když máme vše hotové, tak kolegyně udělá commit změn a pak provede merge s hlavní větví. Vše proběhne bez problému. A změny se sesynchronizují se serverem.
Já udělám také commit svých změn. Než udělám merge, tak si udělám se serverem SYNC abych merge prováděl s aktuální verzí, tedy i se změnami, které tam udělala kolegyně. Když dám merge, tak čekám, že dojde ke konfliktům, a zde nastane problém. Visual studio se rozhodne, že všechny změny, které jsem udělal já zahodí, a ke konfliktu dojde pouze v souboru, kde jsme oba změnili stejný řádek. Zde použiji nástroj určený pro merge a ten mi hlásí, že vše co jsem upravil bude zahozeno a zůstane serverová verze a konflikt je pouze u těch společně upravených řádků.
Tedy dochází ke stavu, kdy VS zahazuje změny, které jsme udělali, a někdy je dokonce přepíše staršími, když někdo po delší době udělá sync.
Dále při přepíná větví, VS hlásí, že některé soubory byly změněny, i-když DIFF nástroj ukazuje že nebyly a GitGui také žádné změny nehlásí. Jedná se o soubory, které jsou ve větvích různé a při přepnutí větve se skutečně musí na disku přepsat verzí v dané větvi.
Jsou tyto problémy normální u integrovaného nástroje Git v VS nebo máme něco špatně nastavené?
Děkuji za rady, po chvilce bádání jsem zjistil, že tento problém nastává kvůli formátování souborů. Celý projekt je v UTF8 se signaturou, když se přepne větev, tak visual studio gitem přepsané soubory kontroluje, asi vůči historii a z nějakého důvodu vyhodnotí že v historii byl soubor uložen v jiném kódování, třeba v UTF-8 bez signatury, nebo dokonce windows. Tuto informaci jsem zjistil až za použití easy-git místo integrovaného modulu git. Neboť easy-git to napíše, že je rozdílné kódování. Ale nemám ponětí kde přijde k tomu, že to kódování je jiné, když celý projekt je v UTF-8. Dokonce jsem zkusil vytvořit kopii repositáře, která neobsahovala historii a odpojil ji od serveru aby se k ní nedostal. Fungovalo do doby než se začala historie tvořit a pak se začaly objevovat zase falešné soubory.
Kolegu ještě napadá jestli nedělají bordel konce řádků. Že by s tím mělo visual studio problémy, když historii tahá z databáze a porovnává.
Komentáře
- Anonym : To by mohlo dělat problémy: https://help.github.com/articles/dealing-with-line-endings/ — 29.5.2017
Pro zobrazení všech 5 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře