2012-03-02 6 views
9

Opracowujemy Visual Studio 2010 (w języku C#) i migrujemy jakiś czas temu z SVN do GIT. Teraz próbujemy podzielić nasze repozytorium (które jest dość duże - ~ 30 000 plików) na wiele repozytoriów git - po jednym dla każdego rozwiązania. Rozwiązania dzielą niektóre projekty, głównie biblioteki, które tworzymy w firmie i lubimy dodawać do nich wszystkie rozwiązania.Jak radzić sobie z Submodules Git w Visual Studio rozwiązań o innym układzie?

Nowe repozytoria mają płaski układ. Jeden podkatalog dla każdego projektu (wspólne projekty to podmoduły). W dużym starym repo, projekty są w strukturze drzewa.

Problem występuje z odniesieniami zewnętrznymi w submodułach. W nowych reposach ścieżką do odniesienia może być "...... libs \ someproject", podczas gdy w nowym layoucie właściwą ścieżką będzie ".. \ someproject".

Mieliśmy już kilka wojen edycyjnych w tej sprawie i nie chcemy więcej.

połowiczne rozwiązania mogłem pomyśleć:

  • użytku „Reference” Ścieżki w ... csproj.user i uwzględniają ten plik z kontroli wersji (musi być przerobione dla każdego dewelopera i po każdym porządki reopsitory)

  • użytku oddziałów dla każdej sytuacji i starają się uczyć wszyscy, gdzie „prawdziwe” commity powinien iść i gdzie „zmiana środowiska” commity powinien iść (submoduły nie są już najprostsze pojęcia ...)

  • osadzonych binariów zamiast submodułów (ale co z rozwojem zmian w submodułach? co z różnymi wersjami log4net?)

Czy ktoś wie o rozsądnym rozwiązaniu?

Odpowiedz

5

Ponieważ jesteś z prośbą o rozsądnego rozwiązania, mogę tylko doradzić, aby zajrzeć do uruchomienia własnej usługi Nuget (patrzeć na http://www.MyGet.org inspiracji)

http://nuget.codeplex.com/

+1

Sądzę, że sugerujesz przejście od włączenia źródła do włączenia biblioteki DLL z rozsądnym zarządzaniem zależnościami. Jeśli tak, to brzmi kusząco, ale teraz opracowujemy wspólne biblioteki jako część obejmujących rozwiązań. Wydaje się dość ciężki sposób, aby rozwiązać problem. – plaugg

+0

Jeśli, jak rozumiem, są to oddzielne projekty VS, nie powinno to stanowić problemu pod względem wykonalności, ale w rzeczywistości nie jest to szybkie hackowanie, którego możesz szukać ... Jeśli martwisz się debugowaniem, to obsługuje nuget łączenie z serwerem źródłowym symboli w celu utrzymania doświadczenia debugowania, ale jeśli istnieje wiele zmian między głównym i pomocniczym projektem, może to stanowić problem. Jestem trochę niezdecydowany w.r.t. brak elegancji submodułów git i chciałem zaproponować alternatywę, której nie wymieniłeś (i która obsługuje wersjonowanie!). – Dirk

+0

Jestem trochę smutny, że ta opcja nie była dostępna, gdy nadal pracowałem z .NET jako zespołem. Visual Studio jest notorycznie głupie, jeśli chodzi o zależności. Takie podejście ma wiele zalet. Najważniejsze dla mnie jest jednak to, że z perspektywy programistów projekty staną się szybsze w konfiguracji, kompilacji i programowaniu. Kiedy sprawdzam nowy projekt, po prostu pobieram wszystkie potrzebne biblioteki i muszę po prostu skompilować biblioteki projektu, aby go uruchomić. Nie tylko to, ale zniknęło, jest zagraceniem tych podprojektów, które znacznie ułatwiają zrozumienie projektów. – SpoBo

1

Użyj jednego submodułu do przechowywania wszystkich "popularnych bibliotek". Tylko jeden poziom. Ale powinieneś przenieść wspólne biblioteki jako usługi z dobrze zdefiniowanymi umowami. W ten sposób możesz stopniowo wprowadzać nowe wersje bez przestojów. W ten sposób masz tylko submoduł w każdym z nich, który zawiera umowy. Mogą to być interfejsy lub wiadomości.

+0

Może nie rozumiem twojej odpowiedzi. Wygląda na to, że proponujesz układ rozwiązania. Moje pytanie nie dotyczy rozwiązania, ale sposobu radzenia sobie z różnymi środowiskami dla submodułów w różnych rozwiązaniach. – plaugg

+0

To powinno zająć się repo poziomu. Projekty modułów muszą to odziedziczyć. Powiedz dla nhibernate, masz jakąś wspólną funkcjonalność. Teraz chcesz użyć tego w usłudze systemu Windows ap i ap ap. Musisz ustawić wątek u góry. To samo dotyczy innych ustawień. –

1

Więc jeśli ja rozumiem poprawnie, problem polega na Visual Studio, a nie na Git? W takim przypadku użyj starej struktury drzewa, która działała w Visual Studio. Uczyń także strukturę podmodulkową strukturą drzewa. Zatem szczyt drzewa byłby jednym superpowodzeniem, którego sub-moduły (gałęzie) miałyby własne submikle, dopóki nie zejdziesz do liści twojego drzewa. Początkowo byłoby to trudne, ale powinno po prostu działać.

2

JEŚLI idziesz dalej drogą zarządzania paczkami, rozważ OpenWrap. Jednak osadzanie artefaktów zarządzania pakietami w kodzie źródłowym jest złym pomysłem. Możesz użyć takich narzędzi, aby zaktualizować to, co faktycznie jest przechowywane w submodułach, ale nie polegaj na nich w czasie kompilacji. Oczekuj, że pliki binarne będą tam z punktu widzenia twoich skryptów budujących.

1

Mam podobny problem z wykorzystaniem VS 2013.

Chcę użyć bezpośrednio git-svn zamiast SVN. SVN ma gigantyczny zestaw katalogów. Nie mogłem utworzyć pojedynczego repozytorium git, które zawierałoby cały nasz katalog trunk. Git-zawsze zakończył działanie z błędem, a repozytorium zostało uszkodzone. Pracowałem wokół problemu wykonując następująco:

  1. Korzystanie git-svn, że sklonowane podzbiór folderów off SVN/bagażniku, że muszę przez utworzenie jednego repozytorium git-per folderu.
  2. Utworzono lokalny repozytorium git dla rodziców, które zawiera wszystkie moje sklonowane przez git-svn foldery.
  3. Każde repozytorium git zostało dodane jako podmoduł do nadrzędnego repozytorium git.

Problem z Visual Studio polega na tym, że nie rozpoznaje on wielu projektów poza głównym projektem, w którym otworzyłem rozwiązanie. To rozwiązanie znajduje się w folderze, który zawiera tylko pliki rozpoznawane przez program Visual Studio jako znajdujące się pod kontrolą git-source.

Próbowałem ustawić preferencje git, aby użyć katalogu nadrzędnego wyższego poziomu jako lokalizacji git-repostitory, nie zauważając żadnej różnicy.

+0

Nieważne. Właśnie dowiedziałem się, że Visual Studio nie obsługuje podmodułów Git. https://connect.microsoft.com/VisualStudio/feedback/details/790028/visual-studio-tools-for-git-cant-see-submodule-changes – Catriel