Întotdeauna angajați același fișier cu SVN

În aplicația mea web am un fișier care deține numărul curent de revizie prin $ Rev $. Acest lucru este amendă, cu excepția cazului în care nu fac modificări în acest dosar, nu se face angajat.

Există oricum posibilitatea de a forța un singur fișier să se angajeze întotdeauna la serverul SVN?

Folosesc TortoiseSVN pentru Windows, astfel încât orice cod sau instrucțiuni pas-cu-pas ar fi de ajutor.

0
fr hi bn

13 răspunsuri

@gradonmantank: Deoarece vrea ca fișierul să fie actualizat cu cel mai recent număr de revizie. I-ai citit complet întrebarea?

Cârligul de pre-comitere ar putea funcționa.

0
adăugat

Această amendă funcționează, cu excepția cazului în care nu fac modificări la acest fișier, nu se angajează.

Dacă fișierul nu se schimbă niciodată, de ce ați avea nevoie de el pentru a comite de fiecare dată?

[EDITAȚI | ×] @Sean = Am inteles ce incearca sa faca, dar daca fisierul nu se actualizeaza niciodata printr-un cârlig sau alt proces si de aceea niciodata nu se schimba atunci SVN nu o va ridica niciodata.

0
adăugat

În funcție de client, unele dintre ele oferă un cârlig de pre-comitere pe care puteți implementa ceva care pur și simplu "atinge" fișierul și îl marchează așa cum s-a schimbat. Dacă utilizați ceva de genul Visual Studio, puteți crea o sarcină post-construire care ar "atinge" fișierul, dar va trebui să vă asigurați că faceți o construcție înainte de a efectua modificări.

0
adăugat

@gatekiller: Se pare că TortoiseSVN nu are suport Cârlige pentru client .

0
adăugat

Comandarea fișierului nu te-ar face niciodată bine. Fișierul nu este comis cu versiunea completă în interior, este înlocuit doar cu cuvântul cheie. Dacă te uiți la fișierul din depozit, vei vedea asta.

Ca atare, trebuie să forțați actualizarea fișierului într-un fel.

Dacă vă aflați pe platforma Windows, puteți utiliza instrumentul SubWCRev distribuit cu TortoiseSVN. Documentație aici .

0
adăugat

Puteți folosi svn pre-commit-cârlige pentru a face acest lucru Ideea generală pe care o am în vedere este aceea de a crea noul număr de revizie în fișier (să-l folosească folosind svnlook) sau poate schimba o proprietate falsă în fișier (trebuie să o schimbe sau SVN o va ignora).

Pentru mai multe informații despre cârligele de pre-angajare am găsit această pagină util .

0
adăugat

Aveam un mod manual de a face asta. Aș rula un script care ar folosi sed pentru a înlocui un comentariu cu marca curentă curentă în fișierul meu $ $ $. În acest fel, conținutul fișierului s-ar schimba și Subversion-l va comite.

Ceea ce nu am făcut a fost să fac acest lucru la următorul pas: folosind Cârligele de depozitare a subversiunii pentru a automatiza procesul. Problema este că nu sunt sigur dacă ai permisiunea de a schimba conținutul fișierelor în cârlige. Documentația pare să sugereze că nu puteți.

În schimb, cred că veți avea nevoie de un mic script pe care l-ați executa în locul comenzii svn commit care actualizează mai întâi marcajul de timp și apoi execută comanda normală.

0
adăugat
N-am făcut niciodată să lucrez ...
adăugat autor GateKiller, sursa

Ar putea fi modificat fișierul cu numere de revizuire printr-un script care deplasează site-ul dvs. de la SVN la serverul web?

Nu sunteți sigur despre Windows, dar folosind un script bash, aș face ceva de genul ..

$ version=$(svnversion)
$ svn export . /tmp/staging/
Export complete.
$ echo "Revision: ${version}" > /tmp/staging/version.txt

Atunci /tmp/staging/version.txt ar conține "Revizie: 1" (sau oricare ar fi cel mai mare număr de revizie).

Puteți înlocui, desigur, un identificator într-un fișier, ca de exemplu $ Rev $ (în loc să creați version.txt conform exemplului de mai sus)

0
adăugat
Opps, am uitat să copiați linia "set version =" .. Multumesc!
adăugat autor dbr, sursa
Acest lucru nu funcționează; încercați $ (svn ...) în loc de $ {version}.
adăugat autor Aaron Digulla, sursa

Vă sugerăm să schimbați abordarea, să comutați un fișier de fiecare dată însemnând implicit păstrarea numărului de revizie globală în acel fișier. Utilizatorul poate avea nevoie de un alt cuvânt cheie, GlobalKey , a cărui inexistență este explicată aici De fapt, nu am mai folosit svnversion , dar vă poate duce la o soluție.

0
adăugat

Cred că ați putea să nu înțelegeți cum funcționează flagul $ Rev $. Scopul flagului Rev nu este ca această revizuire să fie întotdeauna angajată în depozitul de subversiune. Scopul este ca pe o actualizare, flagul Rev va fi întotdeauna ceea ce este revizuirea. Nu ar trebui să introduceți codul în subversiune care conține revizuirea. Subversiunea este foarte bună pentru a urmări aceste informații pentru dvs.

Ceea ce ați pierdut probabil este că trebuie să setați o proprietate asupra fișierului, astfel încât cuvântul cheie Revizuire să fie procesat corespunzător.

svn propset svn:keywords "Revision" file.txt

Acest lucru vă va asigura că ori de câte ori faceți o actualizare, fișierul $ Rev: xxx $ va fi actualizat cu versiunea curentă. Nu trebuie să vă faceți griji cu privire la modul în care este angajat în depozit.

0
adăugat
Cred că @ Ștefan a însemnat ceva diferit. Desigur, $ Rev $ îți va da numărul de revizie corespunzător ultimului angajament al fișierului respectiv . Dar cred că Stefan vrea să aibă ultimul număr de revizie al întregului proiect și să îl folosească ca un număr de versiune a software-ului său.
adăugat autor user2161065, sursa

Dacă ai instalat TortoiseSVN, ai și instrumentul SubWCRev disponibil. Folosiți acest instrument pentru a obține revizuirea în loc să utilizați în mod greșit cuvântul cheie $ REV $.

  1. create a template file which contains your defines, maybe something like

    const long WC_REV = $WCREV$;

    in a file named version.h.tmpl

  2. on every build, call SubWCRev to create the 'real' file you can use in your application:

    SubWCRev path\to\workingcopy path\to\version.h.tmpl path\to\version.h

Aceasta va crea fișierul version.h din version.h.tmpl, textul $ WCREV $ înlocuit cu revizia pe care este în prezent copia dvs. de lucru.

docs pentru SubWCRev ar putea fi de ajutor.

0
adăugat

În principiu, doriți ieșirea comenzii svnversion într-un fișier.

Astfel de fișiere sunt de obicei ținute în afara depozitului și create automat de un script de construire. Vă sugerez să faceți același lucru. Dacă nu construiți, ci doar la un svn up de pe server, trebuie să sunați svnversion după svn up sau să creați un script shell pentru a face ambele acțiuni.

Dacă aveți pentru ao păstra în depozit, pe de altă parte, apelul svnversion într-un cârlig de pre-comitere ar fi cel mai bun pariu.

0
adăugat
+1 la această idee. Aș dori însă să adaug că în depozitele mari, svnversion poate dura mult timp pentru a rula (peste un minut). Din acest motiv, parsez în loc de "svn info".
adăugat autor Joshua McKinnon, sursa

Cred că cea mai bună abordare pentru a vă asigura că există un fișier în aplicația dvs. web care are numărul de revizie SVN este să nu aveți un fișier pe care îl comiți, ci mai degrabă să îl extrageți ca parte a scriptului dvs. de construire.

Dacă utilizați maven, puteți face acest lucru cu pluginul maven-buildnumber.

0
adăugat