Vraag Hoe een SVN branch / tree conflict te 'repareren'?


Ik nam een ​​softwareproject over en besloot alles onder SVN te plaatsen (op Assembla) met Tortoise SVN. De stam is onder ROOT. Dus de stam bevatte de hele applicatie (die ik had getagd met 1.0). Voor mijn eerste grote functie heb ik een functietak gemaakt met de naam "dev".

Ik kon zonder problemen wijzigingen in de stambranche in de dev-tak samenvoegen (omdat ik kleine bugfixes aan het doen was). Toen mijn functie eenmaal voltooid was, deed ik een fusie terug in de hoofdtak. Alles werkte tot op dit punt goed. De nieuwe code onder ROOT heeft de nieuwe functie correct weergegeven. Maar toen deed ik een commit (van het resultaat van de samenvoeging) en nu elke keer als ik probeer een fusie te maken vanaf de root of vanuit de dev branch, klaagt SVN over "boomconflict" in veel bestanden. Zelfs bestanden die ik niet heb aangeraakt sinds de samenvoeging. Ik probeerde de conflicten op te lossen, zonder succes.

Ik ben de enige ontwikkelaar, dus ik geef niet echt om grote veranderingen in de repository. Maar ik wil nog steeds de geschiedenis van alle bestanden bewaren als het mogelijk is.

Wat zou de beste manier zijn om dit probleem op te lossen? Is er een manier om alle nieuwste bestanden in de ROOT-trunk als de "definitieve" versie van het bestand te taggen?


[EDIT] Meer informatie

  1. Ja, 'main' en 'trunk' is hetzelfde. Ik heb mijn vraag verduidelijkt
  2. Toen je weer terugging uit de kenmerktak, deed je eerst nog een nieuwe samenvoeging van de stam om de laatste stamveranderingen op te heffen? "Ja, de stam was up-to-date en de dev-tak had alle veranderingen van de stam.
  3. "alles werd verknoeid door vastleggen": wat ik bedoelde was dat de commit goed was, maar toen ik begon te fuseren vanuit de kofferbak / naar de kofferbak, klaagt SVN over 'Boomconflicten'.
  4. Ik heb meer dan 200 boomconflicten. Dus wat ik zoek is een "accepteer alles" -commando

[EDIT] elhoim-oplossing loste mijn probleem niet op. Hij had echter gelijk met problemen met de SVN-versie. Momenteel (2009-10-28) gebruikt Assembla SVN v1.5.1 en mijn schildpadSVN was v1.6. Dus dat was de reden dat ik zoveel boomconflicten had. Ik heb geprobeerd de oplossing te gebruiken zoals geleverd door de link van elhoim en het werkte niet (ik probeerde meerdere keren samen te voegen voordat ik de HEAD-to-HEAD-samenvoeging probeerde. Sommige bestanden werden daardoor niet overgedragen aan de root-tak).

Aangezien een HEAD-to-HEAD-fusie nog steeds niet zou werken, besloot ik om gewoon alle ".svn" -bestanden in mijn filiaalmap te verwijderen, de bestanden naar de ROOT-map te kopiëren en een commit te doen.


20
2017-10-20 00:30


oorsprong


antwoorden:


Dit antwoord zou moeten helpen.

Anders, gebruikt u een schildpad SVN-client 1.6.x? Het lijkt het heeft problemen als de SVN-server kleiner is dan 1.5.6...


11
2017-10-28 13:08



Het lijkt erop dat sommige wijzigingen die werden aangebracht op het niveau van de directorystructuur op de stam niet werden geabsorbeerd in de dev-tak voordat de samenvoeging opnieuw in de stam werd uitgevoerd. Dit heeft mogelijk het boomconflict veroorzaakt in jouw geval.

Ik vond dit gedeelte van het SVN-boek erg nuttig en bevat methoden om een ​​situatie als die van jou op te lossen. Ik hoop dat dit helpt. http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html

[EDIT] AANVULLENDE INFO:


Heb je al gelopen? svn opgelost op de werkruimte waar je de conflicterende versies hebt overschreven / opgelost? Er kunnen bestanden / mappen nog steeds als "conflicterend" gemarkeerd zijn in uw problematische werkruimte (die waar u de samenvoeging daadwerkelijk hebt uitgevoerd) - Dus als u die eenmaal doorzocht hebt en de conflicten met de hand hebt opgelost, kunt u svn "opgelost" uitvoeren. Ik gebruik de subversion opdrachtregelclient voor mijn samenvoegingen - maar ik heb geverifieerd en deze optie is ook beschikbaar op schildpad. Dit zou de conflict status moeten uitschakelen en je verder moeten laten gaan. succes.


6
2017-10-20 03:10



Over het algemeen kan de samenvoegingsondersteuning van SVN alleen omgaan met het gebruik van een functietak een keer. Dat wil zeggen, je werkt erin en voegt veranderingen van stam daarin samen en gebruikt dan svn merge --reintegrate om het weer samen te voegen in de kofferbak als je klaar bent.

Als je daarna wilt blijven werken, moet je een nieuw filiaal maken om aan te werken. Ik denk dat je de oude kunt verwijderen en een nieuwe op zijn plaats kunt maken zonder gegevens te verliezen als je hetzelfde repositorypad wilt behouden, maar je wilt misschien eerst proberen met een testreplicator voor het geval de svn:merge info wordt slecht.

Dit is niet perfect. Zien deze post vanaf wanneer de huidige samenvoegsemantiek werd geïntroduceerd voor meer gedetailleerde informatie.

Pas ook op voor gebruik van svn cp of svn mv voor andere doeleinden dan vertakking en samenvoegen - als u dit doet, moet u de onechte verwijderen svn:merge eigenschappen die ze creëren (op zowel de tak als de stam indien nodig) voordat het re-integratieproces wordt uitgevoerd of het zal mislukken, boomconflictberichten.

Over het algemeen is de branch en fusie van svn nog steeds vrij zwak in vergelijking met de gedistribueerde VCS-familie (git, hg, bzr, darcs, enz.), Maar als u deze richtlijnen volgt, doet u het werk.


5
2017-10-28 06:08