Indholdsfortegnelse
Rul tilbage til tidligere version
Gå tilbage til en tidligere revision (erstat 3523 med dit revisionsnr):
1 |
svn update -r 3523 |
Fortryd en handling
Med svn revert can du fortryde ændringer til filer eller handlinger foretaget lokalt.
Dette eksempel viser hvordan du fortryder svn add på en fil:
1 2 3 |
svn add forkert-fil.txt svn revert forkert-fil.txt |
Jeg kom på et tidspunkt til at køre svn add * i et nyt projekt, og kunne se at det faktisk også tilføjer alle de filer jeg ellers har bedt subversion om at ignorere:
1 |
svn add * |
Jeg reddede den fejl med:
1 |
svn revert --recoursive * |
Se log for en fil
Vis commit loggen for en specifik fil (erstat filnavn med stien til din fil)
1 |
svn log filnavn |
Vis commit loggen for en fil i en bestemt periode:
Vær opmærksom på at subversion formoder 00:00:00 hvis du ikke angiver tid. Du får heller ikke nødvendigvis commits ud i rækkefølge. Brug af dato er generelt upræcist jvf. apache.org. Men output inkluderer revisionsnumre som du herefter kan bruge til at få et mere præcist output:
1 2 |
svn log filnavn -r {2018-01-19}:{2018-01-20} svn log filnavn -r 3542 |
Seneste revisionsnummer
Hent seneste revisionsnummer i repo uden at opdatere din kopi:
1 |
svn info -r HEAD |
Ignorer filer og foldere
Ignorer filer og foldere der ikke skal versioneres:
1 |
svn propedit svn:ignore . |
Herefter kan du redigere en liste over filer der skal ignoreres. Den vil naturligvis være tom den første gang.
Hvis du får denne fejl, er det fordi du mangler at fortælle subversion hvilken editor du vil benytte:
1 |
svn: E205007: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found |
Dette fikses ved at sætte SVN_EDITOR … i eksemplet her sættes den til ‘vim’. Det kunne også være ‘vi’ eller ’emacs’. Prøv derefter igen… hvis det ikke virker, så prøv VISUAL eller EDITOR.
1 2 |
export SVN_EDITOR=vim svn propedit svn:ignore . |
Vis indholdet af ignore listen:
1 2 3 4 |
$ svn propget -R svn:ignore .node_modules .gitignore dist* |
Vis effekten af ignore listen:
1 2 3 4 5 |
$ svn status --no-ignore | grep "I " I .gitignore I dist I dist-prod I node_modules |
Forhåndsvisning af opdatering
Hvis du vil se hvilke opdateringer der er tilgængelige, uden at foretage en egentlig opdatering:
1 |
$ svn status --show-updates |
Nedenstående viser alle ændringer i filer der er forskellige fra dem der ligger i repo:
1 |
svn diff -r head |
Du kan med fordel læse ændringerne ud i en fil, for gennemgang:
1 |
svn diff -r head > diff.txt |
Ændre rettigheder på filer i subversion
Hvis et shell script oprindeligt blev føjet til subversion uden x sat (executable), og dette senere er tilføjet, vil du opleve at ændringen ikke slår igennem. I stedet forsvinder denne rettighed hver eneste gang filen opdateres med en ny version fra dit repo… og det er mildest talt irriterende. Det skyldes at subversion kun registrerer rettigheder første gang filen tilføjes. Så hvis dette skal ændres senere, må det gøres manuelt.
Jeg løste det ved hjælp af find
og svn’s propset
:
1 2 3 4 5 |
find . -regextype posix-extended -regex ".*\.(bash|sh)" -perm -g=x -exec svn ps svn:executable on {} \; property 'svn:executable' set on 'folder/example1.sh' property 'svn:executable' set on 'folder/example2.sh' property 'svn:executable' set on 'folder/example3.sh' [...] |
Først findes alle filer der ender på .bash eller .sh. og har executable rettighed på gruppen (-perm -g=x
). Dernæst afvikles subversions executable kommando for at registrere ændringen på filen.
Du kan bagefter se ændringen med svn diff :
1 2 3 4 5 6 7 8 9 10 11 |
Index: example.sh =================================================================== --- example.sh (revision 189) +++ example.sh (working copy) Property changes on: example.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property |
Når du opdaterer en fil der har fået ændret sine egenskaber, vil du opdage at der faktisk er 2 kolonner der kan indeholde en kode:
1 2 3 4 5 6 7 8 |
svn update Updating '.': Authentication realm: <https://repo.example:443> My Repo Password for 'me': ************ U folder/file1.sh U folder/file2.sh UU folder/file3.sh |
I eksemplet herover er file1.sh’s indhold opdateret, mens file2.sh har fået en eller flere egenskaber opdateret, og file3.sh har fået opdateret både indhold og egenskaber.
Tilføje og fjerne mapper
Du kan tilføje og fjerne mapper direkte i dit repository:
1 2 3 |
svn delete https://repo.example.com/sti/til/mappe1 -m "Sletter igen...Det var en fejl!" svn mkdir https://repo.example.com/sti/til/mappe2 -m "Opretter en ny mappe" |