2009-10-02 19 views
6

Nasz facet VB6 był częścią ostatniego RIF (Redukcja siły). Praca, którą wykonał została podzielona między mnie i innego programistę. Często zarówno wprowadzamy zmiany do projektów w tym samym czasie. To nie jest problem z CVS, ponieważ pracujemy w różnych obszarach. Jednak VB6 wydaje się modyfikować sekcję Reference i zmieniać ścieżki za każdym razem, gdy którekolwiek z nas dotknie projektu. Ponieważ nie mamy dokładnie takiej samej konfiguracji ścieżki dla drzewek źródłowych, cały czas napotykamy konflikty scalania w pliku vbp.Jak radzić sobie z odwołaniami do pliku VB6 .vbp zmieniając

Czy jest jakiś sposób obejścia tego, poza oczywistą metodą zmiany naszej konfiguracji, więc mamy te same struktury katalogów?

+0

Jak powiedział Guru C-Pound w swojej odpowiedzi, wystarczy sprawdzić plik .vbp, kiedy naprawdę trzeba, co nie jest często. Ponadto, zadałem proste pytanie: "Stackoverflow".com/questions/167580/jest-to-aby-zapobiegać-the-vb6-kompilator-od-tasowania-zawartości-plików – raven

Odpowiedz

5

chciałbym zaproponować dwie rzeczy:

  1. Nie popełnić .vbp chyba dodać plik do projektu.
  2. Oznaczenie .vbp jako przeznaczone tylko do odczytu i sprawdź je w repozytorium. Kiedy użytkownicy go sprawdzą, powinien on nadal być tylko do odczytu, co uniemożliwi zapisanie zmian w ścieżkach odniesienia (i pozornie losowe porządkowanie pliku). Kiedy musisz dokonać zmiany w projekcie - spraw, aby plik był zapisywany i zapisywany, zapisz zmiany, a następnie dokonaj ponownego odczytu, zanim zostanie zatwierdzony.
+1

Dodałbym trzecią rzecz, aby upewnić się, że wszystkie niezbędne zmiany w VBP są sprawdzane. Utwórz wersje z maszyny ze znanymi wersjami zainstalowanych składników i rozpocznij od czystego katalogu (aby zapewnić, że wszystkie niezbędne pliki są w kontroli wersji). Najlepszym sposobem na to jest posiadanie automatycznych buildów. – MarkJ

3

W zależności od posiadanego systemu kontroli wersji możliwe jest zautomatyzowanie tego problemu. Zarówno haki Subversion, jak i Mercurial - skrypty uruchamiane przez określone zdarzenia, takie jak pobranie, aktualizacja lub zatwierdzenie. Pisaliśmy dość prosty skrypt, który został uruchomiony na popełnienie: wyglądało to, aby zobaczyć, czy nie było .vbp w pakiecie popełnił, a jeśli było, prowadził „normalizacji” rutynowych że

  1. umieścić wszystkie .cls /.bas/.frm pliki na górze .vbp, w kolejności alfabetycznej
  2. umieścić punkt odniesienia w kolejności alfabetycznej
  3. dolnym bocznym ścieżki odniesienia

reszta pliku jest pozostawione sam, ponieważ to tylko pierwsze trzy sekcje, które VB wydaje się rozkoszować.

W związku z tym, większość czasu, w którym popełniłeś i nie wprowadziłeś żadnych znaczących zmian w .vbp, skrypt przechwytujący przywraca twój plik .vbp do kanonicznego, uporządkowanego stanu (jak powrót), który ma efekt usunięcia go z zatwierdzenia, ponieważ nie jest już zmieniany.

Jeśli dodasz nowy plik lub odniesienie do swojego projektu, konsekwentne sortowanie alfabetyczne linii VBP oznacza, że ​​unika się konfliktów scalania, ponieważ algorytm scalania VC może łatwo i poprawnie wykryć zmiany.

Napisaliśmy nasz skrypt w JavaScript i wykonaliśmy go przy użyciu Hosta skryptów systemu Windows, ponieważ w przypadku skrzynek Windows przynajmniej to usuwa zależność od interpretera takiego jak Perl/Python.

Po podłączeniu tego skryptu do nowych projektów VB trwa 30 sekund. Przewagą nad innymi ręcznymi podejściami jest to, że nie musisz świadomie pracować nad plikiem VBP. Po prostu zatwierdź to wszystko, a skrypt zajmie się resztą.

+0

Nic nie wiem o JavaScript; i "podpięcie" skryptu w Pythonie nie byłoby dla mnie 30-sekundowym zadaniem. Czy możesz przypadkiem dzielić się ze mną scenariuszem/umieścić go w swojej odpowiedzi? –

+0

Niestety, nie mogę udostępnić kodu. Przez "podpięcie skryptu" miałem na myśli dołączenie skryptu jako haka do zdarzenia poprzedzającego w .hgrc twojego repozytorium. Tak więc: '[hooks]' 'precommit.normalise =" ŚCIEŻKA DO TWOJEGO PISMA W JĘZYKU SWOJEGO WYBORU "' Nie miałem na myśli napisania samego skryptu. To z pewnością potrwa dłużej niż 30 sekund, ale myślę, że mój opis tego, co robi, to tylko cała specyfikacja, której powinieneś potrzebować. – perlyking

+0

Rozumiem. Sam już normalizuję rutynę. A zajęło to więcej niż 3 miesiące niż 30 sekund. pisać ;-). Jeśli ktokolwiek kiedykolwiek będzie tego potrzebował, jestem gotowy do wydania go na otwartej licencji - po prostu zapytaj. –

Powiązane problemy