Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
V tomto díle se konečně podíváme na to, jak se vlastně Subversion ovládá a jak ji využít ke své práci. Základní pracovní cyklus je stejný jako u CVS; stáhnout aktuální verzi (checkout, update), udělat nějaké změny na souborech (add, delete, copy, move), zjistit, co je na pracovní verzi změněno (status, diff, revert), vypořádat se s konflikty (merge, resolved) a následně změny uložit do repository (commit). Existuje ale ještě mnoho dalších příkazů, a zdaleka ne o všech si tu něco povíme. Všechny jsou samozřejmě popsány v dokumentaci.
Řádkový klient Subversion se jmenuje svn a po normální instalaci leží v
/usr/bin/svn
. Všechny následující příkazy se tedy zapisují
ve tvaru:
svn <příkaz> <parametry>
|
Ještě než se pustím do popisu příkazů, upozorním na jednu, mně ne úplně
sympatickou, věc. Pokud se přistupuje k autentizované repository a klient
žádá pro přístup heslo, pak se toto heslo implicitně ukládá do souboru
~/.subversion/auth/svn.simple/nějaký_hash
. V tomto souboru
je uloženo uživatelské jméno a heslo v textové podobě. Proto je potřeba
ohlídat to, kdo má k tomuto souboru přístup, případně zakázat ukládání
hesla do tohoto souboru (viz dále). Proč tomu tak je, a jak tento soubor
vypadá, se můžete dočíst zde.
HEAD
BASE
COMMITTED
PREV
Nachází se v ~/.subversion/config
a lze v něm nastavit pár
hodnot, se kterými pak klient pracuje. Pokud mají být tyto parametry
užitečné, je třeba je v konfiguračním souboru odkomentovat, včetně
příslušné kategorie zapsané v hranatých závorkách. Patří mezi ně:
store-auth-creds = [yes|no]
[auth]
. Může nabývat hodnot yes|no
a určuje, jestli se mají ukládat autentizační údaje (viz poznámka výše). V
konfiguračním souboru je tato položka nazvána chybně
'store-password
', takže pozor ať nemáte v konfiguráku
'store-password = no
' a nedivili se, že se vám hesla vesele ukládají na disk.editor-cmd = [vim|pico|joe|..]
[helpers]
. Určuje, jaký editor se má spustit při psaní logu. Tento editor se spustí, pokud nezadáte log přímo na řádku za
parametr '-m
'.diff-cmd
[helpers]
. Říká, jaký program se má spouštět při
vytváření rozdílového výpisu. Někomu se může hodit více například
zdiff, xmldiff nebo třeba nějaký vlastní. Záleží na tom, jaké soubory se v
repository skladují.
V případě použití nějakého externího diffu je ale nutné pouštět ho
přes nějaký skript, protože Subversion mu předhodí stejné parametry
jako klasickému diffu, což celkem dělá neplechu. Je tedy možné
řešit to třeba následovně:
diff-cmd=muj_diff_skript.sh
|
a v muj_diff_skript.sh
mít:
#!/bin/bash
|
$6
a $7
jsou právě ty argumenty, které určují cestu k souborům, mezi kterými se má muj_diff
provést.
global-ignores
[miscellany]
. Specifikuje masku souborů, které nejsou
verzované a nemají se zobrazovat při výpisu u 'svn status
'. V
normálním případě se neverzované soubory zobrazují se značkou '?
'.
Je to užitečné, třeba když jsou v pracovní kopii např. zkompilované
binárky, dočasné soubory, ..., které se stejně nebudou commitovat.log-encoding
[miscellany]
. Říká, v jakém kódování budou ukládány "commit logy".Najde se ještě pár dalších parametrů, které tu už ale nebudu v tuhle chvíli rozebírat.
To nejhorší máme za sebou, teď už to bude vesměs legrace. V dalším textu
budu předpokládat existující repository na adrese
svn://svn.example.cz/repository/
. Budou zde ukázány jen nejčastěji
používané parametry. Kompletní výpis možných parametrů se dělá příkazem
svn help <příkaz>
|
Pokud už máme nějaký rozpracovaný projekt a chceme ho jen vložit pod Subversion, není nutné tyto soubory kopírovat, a poté přidávat v pracovní kopii, ale je možné je rovnou importovat do repository. Import se nepoužívá příliš často, většinou jen při vytvoření nové repository a jejím naplnění již nějakými existujícími soubory.
svn import jméno svn://svn.example.cz/repository
|
Kde 'jméno
' je buď jméno adresáře nebo souboru. Vzhledem k tomu,
že se v podstatě jedná o commit zatím neverzovaných souborů přímo
do repository, má tedy i import stejné parametry jako commit,
tj. hlavně povinný log.
svn checkout svn://svn.example.cz/repository working_copy
|
Stáhne poslední revize ze zadané adresy do adresáře working_copy. Uvedu některé parametry, které se dají u checkout využít:
-r nebo --revision
-N nebo --non-recursive
--no-auth-cache
svn update working_copy
|
Do adresáře s pracovní kopií nahraje aktuální verzi repository, resp.
verzi, která se explicitně určí. Důležité parametry jsou stejné jako
u checkout
. Při stahování aktuální verze (HEAD) se před každým souborem vypisuje atribut, který oznamuje stav souboru oproti naší pracovní kopii.
Tyto atributy se budou ukazovat i u svn status
. Jsou to:
U soubor
soubor
byl aktualizovánA soubor
soubor
byl přidán do pracovní kopieD soubor
soubor
byl smazán z pracovní kopieR soubor
soubor
byl přesunut na jiné místo v pracovní kopiiG soubor
soubor
byl stažen z repository v aktuální verzi, ale soubor
v naší pracovní kopii byl také změněn. Nicméně změny proběhly na
odlišných místech v souboru a mohly být spojeny do jednoho
souboru(merGed)C soubor
souboru
jsou v přímém konfliktu s našimi změnami v
pracovní kopii. Tento konflikt se musí řešit ručně a patřičné kroky
na vypořádání se s tímto problémem budou probrány za chvíli.Soubory v pracovní kopii je možné editovat, přidávat, mazat,
kopírovat nebo přesouvat. Kromě editace, která se provádí naším
oblíbeným editorem, existují pro práci se soubory speciální příkazy.
Používáním těchto příkazů nepřicházíme o historii souborů, což je
jejich hlavní přednost. Bylo by například možné v pracovní kopii soubor
někde smazat a posléze ten samý vytvořit o adresář vedle. Ale svn move
udělá tu samou práci plus zachová historii. Příkazy jsou velmi intiutivní:
svn add soubor
soubor
do pracovní kopie. Tento soubor musí být fyzicky
přítomen. V podstatě se tím říká, že se má tento soubor začít
verzovat. Pokud není zadán soubor, ale adresář, přidají se všechny
soubory v tomto adresářisvn delete soubor
soubor
z pracovní kopiesvn copy soubor1 soubor2
soubor1
do soubor2
s tím, že soubor2
si sebou nese historii soubor1
svn move soubor1 soubor2
soubor1
na soubor2
. Jde o spojení dvou příkazů a to svn copy soubor1 soubor2
a svn delete soubor1
svn status working_copy
|
Vypíše soubory z pracovní kopie, na kterých se stala nějaká změná oproti
verzi, která byla naposledy stažena. Jako u svn update
vypíše atribut
a jméno souboru. Tyto atributy jsou stejné jako u svn update
plus
existuje ještě pár dalších:
M soubor
L soubor
? soubor
svn add
).! soubor
svn delete
, ale třeba příkazem rm
.~ soubor
svn status
má kromě těch, které už byly popsány u svn checkout
, navíc několik parametrů o kterých se zmíním:
-u nebo --show-updates
svn status
pro zjištění změn nemusí kontaktovat repository,
protože má historii uloženou v pracovní kopii. V případě, že chceme
vědět, jestli nepracujeme se soubory, které už jsou zastaralé, pak k
tomu slouží právě tento parametr. Soubory, které jsou v repository
novější než v pracovní kopii, jsou označeny hvězdičkou.-v nebo --verbose
Takový výpis svn status working_copy --show-updates --verbose
pak může vypadat třeba takto:
Status | Update? | Aktuální revize |
Poslední změna - revize |
Poslední změna - uživatel |
Jméno souboru |
---|---|---|---|---|---|
M | * | 50 | 31 | cipisek | working_copy/my_prog.c |
50 | 10 | cipisek | working_copy/my_prog.h | ||
? | working_copy/my_prog | ||||
* | 50 | 16 | rumcajs | working_copy/INSTALL | |
A | 0 | ? | ? | working_copy/README | |
D | 50 | 27 | cipisek | working_copy/test |
svn diff [soubor] [verze]
|
Pokud se napíše svn diff
přímo v adresáři s pracovní kopií, vypíše se
diff na všech změnených souborech. Je možně ale určit pouze jeden soubor
a zároveň i mezi jakými verzemi se má diff provést. Výpis je v
"unifikovaném diff formátu", to znamená, že před odebranými řádky je
znaménko '-', před přidanými '+'. Dále obsahuje vždy jméno souboru a
čísla řádků, kde změny proběhly. To umožňuje jednoduše generovat
"patche". Příklad:
svn diff soubor1 soubor2 -r 60:80 > r60-r80.patchfile
|
Vytvoří "patch" na soubory soubor1
a soubor2
mezi verzemi 60 a 80 a uloží jej do souboru r60-r80.patchfile
.
Pokud se při update nebo commit ukáže, že soubor, na kterém jsme prováděli nějaké změny, byl během našich úprav v těch samých místech změněn a "commitnut" někým jiným, vznikne konflikt, který je třeba řešit ručně. V případě, že Subversion označí soubor jako konfliktní, provede pár akcí, které je dobré znát. Jednak vytvoří několik nových souborů, a to:
soubor.mine
soubor.rXX
rXX
označuje
číslo revize tohoto souborusoubor.rYY
rYY
označuje číslo nové revize.
Dále v souboru s původním jménem budou označena místa, kde jsou změny konfliktní, a v těchto místech se musí provést ruční úpravy a dát tak soubor do pořádku. Subversion si pamatuje, že je soubor konfliktní a dokud se neřekne, že je problém vyřešen, tak nepovolí změny "commitnout".
V zásadě jsou tři možnosti, jak s konfliktním souborem naložit:
soubor.mine
, prosadíme svou změnu,
pokud se souborem soubor.rYY
, akceptujeme změnu provedenou někým
jiným.svn revert soubor
, což způsobí návrat
k původní verzi z poslední aktualizace (BASE revision). V podstatě
je to totéž, jako pracovní soubor překopírovat souborem soubor.rXX
z bodu 2.Jakmile je konflikt vyřešen, je potřeba dát o tom Subversion vědět. To se
dělá příkazem svn resolved soubor
. Tímto příkazem se smažou všechny
pomocné soubory a povolí se commit do repository. Je potřeba si dobře
rozmyslet a zkontrolovat, jestli už mohu říct, že konflikt byl vyřešen.
Po tomto příkazu je možné "commitovat" i v případě, že v souboru zůstanou
místa označená jako konfliktní.
Nejdůležitější a také poslední akcí, kterou člověk při svém pracovním
cyklu udělá, je odeslání změn zpátky do repository. Před samotným
commitem by tedy měly proběhnout akce jako svn status
pro kontrolu
toho, co jsme změnili, a svn update
pro kontrolu, jestli někdo nepracuje
na stejných souborech jako my.
svn commit [soubory]
|
V pracovním adresáři je možné zadat jen svn commit
a odešlou se všechny změněné soubory. Je možné je ale určit jednotlivě. Commit má několik
následujících parametrů:
-m nebo --message
-F nebo --file
--encoding
Myslím, že už toho bylo probráno celkem dost a na tomto místě bych tento miniseriálek ukončil. Subversion toho sice skrývá ještě mnohem víc, ale tento základní kurz by měl obsáhnout všechny běžně používané akce, které obyčejný uživatel potřebuje. Pokud by se ukázalo, že je zájem o pokračování v takových už spíše lahůdkách, je klidně možné, že ještě nějaký ten díl vznikne.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: