Mam projekt główny, który używa dość standardowego podejścia do drzewa źródłowego + podskładników mercurial.Podskładniki Mercurial - zarządzanie bardziej złożonymi hierarchiami zależności
Master
\lib - compiled binaries - things like log4net, AutoFac, etc
\source - VS solution, one folder per project, etc
\tools - stuff used during the build process
\source\contrib - contains any subrepos like so:
\source\contrib\Sub1
\source\contrib\Sub2
Master\.hgsub contains something like
source\contrib\Sub1 = https://myserver.com/Sub1
Niedawno ustalono, że Sub2 potrzebuje kodu z Sub1, a więc muszę dostosować do tej nowej struktury zależności.
Problem oczywiście polega na tym, że jeśli zastosuję to samo podejście, co powyżej i dodaję Sub1 jako subrepos Sub2, kończę z tą brzydką sytuacją.
\source\contrib\Sub2\source\contrib\Sub1
Mistrz ma teraz 2 niezależne kopie Sub1!
Więc wiem, że powinienem używać względnych ścieżek podczas odwoływania się do podobiektów (RHS z =) - ale to nie pomoże mi w moim scenariuszu tutaj, jak rozumiem. Nie sądzę, że istnieje sposób, aby LHS na żywo na zewnątrz z repozytorium Master, które I myśleć jest to, czego naprawdę potrzebuję tutaj.
Mam kilka pomysłów, jak to naprawić, ale żadna nie pasuje do mnie i zakładam, że musi być lepszy sposób. Moje idealne rozwiązanie pozwala mi dzielić się tym samym sub-repo w ramach wielu projektów bez płacenia kary za posiadanie wielu kopii. Wydaje się, że po prostu marnotrawstwem i nieefektywne w moim scenariuszu tutaj (plus, chciałbym, aby wszystkie projekty, które mają zależność Sub1 korzystać z tego samego hg rewizji, zamiast revisioned jest niezależnie)
Usuń Sub1 jako podskładniki Master i zmienić dowolne ścieżki względne w rozwiązaniu Master, aby odnieść się do podwójnie zagnieżdżonego Sub1. Nie tylko ta struktura ścieżki jest ohydna, ale jeśli dodasz Sub3 do mastera, który ma zależność od Sub1, nadal mam 2 kopie Sub1.
Skompiluj kopię Sub1 i po prostu odepchnij ją w katalogu \ lib. Sub1 wciąż przechodzi pewne zmiany, a ja wolałbym budować przeciwko wersjom źródłowym. Nie chcę płacić podatku ciągłego kopiowania w nowych plikach binarnych do drzewa źródłowego przez cały czas (i wzdęcia drzewa).
W jakiś sposób zerwać zależność Sub2 od Sub1. W oparciu o architekturę repozytoriów prawdopodobnie tak się nie stanie. Sub1 zawiera bardzo ogólny kod biblioteki współdzielonej. Sub2 zawiera kontrakt/interfejs/typy usług WCF, które są potrzebne w dwóch bardzo osobnych projektach - SDK klienta i wdrożenie serwera. W tym momencie rozsądne będzie oddzielenie tych repozytoriów.
Może myślę o tym źle ... a może nie jestem świadomy jakiejś sztuczki hg.
Każda pomoc jest doceniana.
Dobrze, że nie jest całkowicie straszny rozwiązanie Przypuszczam, i myślę, że powinien rozwiązać problem tak długo, jak sprecyzowane mają kodu zależnego w „rodzeństwa” konfiguracji typu . Oczywiście wtedy otrzymam dodatkowe repozytorium w Mercurial, aby utrzymać rodzeństwo razem, ale to może być kompromis, który muszę zrobić. Dzięki za pomysł - nie myślałem o tym. –
Nie jest jeszcze gotowy, aby oznaczyć ją jako odpowiedź - mając nadzieję, że ktoś z selenic zadzwoni do "najlepszej praktyki"; 0 –
Dodatkowe repozytorium nie powinno zaszkodzić, ponieważ powinno używać twardych linków do plików w repozytorium. –