Próbuję skonfigurować repozytorium w systemie FreeBSD dla mojego projektu kursu. Kod jest w ~/OSI, następnie wpisałem następujące polecenia:

   % svnadmin create ///home/SVN/repo
   % svn co file:///home/SVN/repo
   % cd ~/OSI
   % chmod -R u+w include
   % svn add include

Następnie błąd „.” nie jest kopią roboczą. Czy muszę najpierw zaimportować ~/OSI do /home/SVN/repo?

1
pippoflow 22 czerwiec 2011, 02:06

3 odpowiedzi

Najlepsza odpowiedź
% svnadmin create ///home/SVN/repo
% svn co file:///home/SVN/repo
% cd ~/OSI

Jesteś całkowicie zdezorientowany różnicą między katalogiem repozytorium Subversion a twoim katalogiem roboczym. Uczę Subversion od dłuższego czasu i to jest najczęstsza rzecz, która się zdarza. Nie możesz użyć repozytorium Subversion jako katalogu roboczego. Musisz zacząć od nowa, ponieważ prawdopodobnie uszkodziłeś strukturę repozytorium.


Krok po kroku.

  • Twoje repozytorium to miejsce, w którym Subversion Serwer przechowuje wszystkie wersje wszystkich plików w twoim repozytorium. Nie dotykasz. Możesz nawet nie wiedzieć, gdzie to jest, a może nawet nie być na twoim lokalnym komputerze.
  • Twój katalog roboczy zawiera kopię określonej wersji repozytorium. Odbywa się to za pośrednictwem klienta Subversion. Tutaj robisz wszystko i znajduje się na twoim lokalnym komputerze, zwykle w katalogu pod twoim $HOME.

Więc najpierw musisz stworzyć repozytorium. Używasz do tego polecenia svnadmin. To polecenie robi rzeczy w repozytorium. Polecenie to:

$ svnadmin create <directoryName>

Zauważ, że w poleceniu nie ma adresu URL. W rzeczywistości svnadmin nigdy nie przyjmuje adresu URL, a jedynie fizyczny plik znajdujący się na komputerze lokalnym. To samo dotyczy polecenia svnlook. Działają one na serwerze. W twoim przypadku chcesz to zrobić:

$ rm -rf /home/SVN/repo    #Remove the old copy if its still there.
$ svnadmin create /home/SVN/repo

Potrzebny jest tylko jeden ukośnik z przodu. To jest nazwa katalogu. Mogłeś też zrobić to:

$ cd /home/SVN
$ svnadmin create repo

A może nawet to:

$ svnadmin create ~SVN/repo   #Hope you have write access in this dir!

Gorąco polecam korzystanie z svnserve jako serwera repozytorium Subversion. Ułatwia to wpisywanie adresów URL. Dodatkowo pomaga oddzielić się od lokalizacji repozytorium. Dla początkujących jest to mniej zagmatwane.

Aby to zrobić, musisz zrobić dwie rzeczy:

  1. Edytuj plik /home/SVN/conf/svnserve.conf.
  2. Utwórz plik /hone/SVN/conf/passwd.

Najpierw edytuj plik svnserve.conf. Będziesz musiał zmodyfikować dwie linie:

Pojawią się dwie linie (11 i 12 w mojej wersji pliku), które wyglądają tak:

# anon-access = read
# auth-accesss = write

Usuń # z przodu. Właściwie jest to ustawienie domyślne, więc to naprawdę nie ma znaczenia. Jeśli jest to Twoje osobiste repozytorium, możesz zmienić anon-access na write. W ten sposób nie musisz się logować. Osobiście trzymam je tak, jak są.

Wokół linii #20 jest to:

# password-db = passwd

Ponownie usuń # z przodu linii. Otóż ​​to. Zapisz ten plik.

Teraz w tym samym katalogu edytuj plik passwd. Pod linią [Users] umieść coś takiego:

 david = swordfish

david to Twoja nazwa użytkownika. Sugeruję, abyś nadał mu ten sam identyfikator, co twój identyfikator uniksowy. swordfish to hasło. Zrób to, co chcesz. Jeśli chcesz, aby inni mieli dostęp do tego repozytorium, po prostu umieść je tutaj, po jednym użytkowniku w linii, w tym samym formacie, co nazwa użytkownika i hasło. Zapisz plik passwd. Nigdy więcej nie będziesz musiał dotykać tych plików.

Teraz zaczniemy svnserve. Musisz to zrobić przy każdym ponownym uruchomieniu systemu. Możesz nawet umieścić skrypt startowy w katalogu /etc/init.d:

$ svnserve -r /home/SVN/repo -d

(Jeden mały szczegół... Upewnij się, że użytkownik korzystający z svnserve jest właścicielem katalogu i wszystkich plików w /home/SVN/repo. W przeciwnym razie polecenie svnserve nie będzie mogło czytać/zapisywać wymaganych plików. Ponieważ robisz to wszystko z użyciem swojego identyfikatora użytkownika, powinno to wystarczyć).

To wszystko, teraz możesz przejść gdzie indziej i utworzyć katalog roboczy. Zrób to w katalogu TWÓJ DOM. Udawaj, że /home/SVN/repo nawet nie istnieje.

 $ cd $HOME
 $ svn co svn://localhost my_workdir
 $ cd my_workdir
 $ svn mkdir trunk tags branches     #Why the hell not?
 $ svn commit -m "Made the basic directory layout"

Gdzieś po drodze może poprosić o podanie hasła. Po prostu wstaw ten sam, którego użyłeś w pliku passwd. To, co właśnie zrobiłeś, to utworzenie pierwszego zatwierdzenia. Utworzyłeś trzy podstawowe katalogi trunk, branches i tags. Czy musiałeś to zrobić? Nie.

Zauważ, że jesteś w ~/my_workdir, a nie w /home/SVN/repo. Zauważ, ponieważ używam svnserve, nawet nie wspomniałem o tym katalogu. /home/SVN/repo to katalog serwera. Nie dotykasz! Jak powiedziałem, bardzo możliwe, że jako klient nie wiesz nawet, gdzie się znajduje.

Teraz Twój import:

 $ cd trunk
 $ cp ~/OSI .
 $ svn add -R OSI

Łał! Nie svn import? Nie, mamy katalog roboczy (~/my_workdir), więc możemy po prostu dodać pliki. Polecenie Subversion svn add rekursywnie doda katalog OSI oraz wszystkie pliki i podkatalogi. Możesz uruchomić polecenie svn status i sprawdzić, czy wszystkie pliki zostały dodane.

Teraz wystarczy, że prześlesz swoje zmiany:

 $ svn commit -m"Added in OSI files"

Zauważ, że potrzebowałem adresu URL svn://localhost tylko dla polecenia svn co. Mój katalog roboczy zna już adres URL, z którego został pobrany. Możesz uruchomić svn info i zobaczyć te informacje.

Spróbuj teraz:

 $ cd ~
 $ rm -rf my_workdir

Całkowicie usunęliśmy całą pracę, którą właśnie wykonałeś. Jednak repozytorium Subversion nadal to ma. Sprawdźmy to jeszcze raz:

 $ svn co svn:/localhost/trunk/OSI

Spowoduje to utworzenie katalogu OSI z całym OSI, które zaimportowałeś do repozytorium Subversion. To jest twój nowy katalog roboczy. Zauważ, że określiłem trunk/OSI. Teraz możesz tam wykonać całą swoją pracę i zatwierdzić wszystkie zmiany.

Mam nadzieję, że to pomoże ci wyjaśnić. Teraz przeczytaj internetowy Podręcznik użytkownika Subversion. Teraz, gdy już to zrobiłeś, zauważysz, że początkowe rozdziały mają o wiele więcej sensu.

4
David W. 22 czerwiec 2011, 06:24

Tak. Zobacz http://svnbook.red-bean.com/en/ 1.5/svn.tour.importing.html.

0
Oliver Charlesworth 22 czerwiec 2011, 02:08
Czy nie mogę po prostu użyć svn add, a następnie svn commit?
 – 
pippoflow
22 czerwiec 2011, 02:12
Możesz, jeśli najpierw przeniesiesz zawartość katalogu OSI do obszaru roboczego SVN, a następnie wykonasz tam swoje svn add i svn commit.
 – 
DJ.
22 czerwiec 2011, 02:15
@user: Twój system nie wie, że kiedy robisz svn add, chcesz go dodać do tego konkretnego repozytorium.
 – 
Oliver Charlesworth
22 czerwiec 2011, 02:15

Odpowiedź na twoje pytanie brzmi "Tak", musisz najpierw zaimportować ~/OSI do /home/SVN/repo.

Po zaimportowaniu tego folderu do repozytorium SVN, możesz zdmuchnąć swój katalog OSI i pobrać nowy obszar roboczy z repozytorium i przejść do następnego kroku.

% svn import ~/OSI file://home/SVN/repo/trunk
% rm -rf ~/OSI
% svn co file://home/SVN/repo/trunk/OSI
% cd ~/OSI
0
DJ. 22 czerwiec 2011, 02:13