it-swarm-eu.dev

Jak mohu ignorovat adresář s SVN?

Právě jsem začal používat SVN a mám cache adresář, který nepotřebuji pod kontrolou zdroje. Jak mohu ignorovat celý adresář/složku pomocí SVN?

Používám Verze a TextMate na OS X a příkazovém řádku.

743
Gilean

Nastavte vlastnost svn:ignore nadřazeného adresáře:

svn propset svn:ignore dirname .

Pokud máte více věcí, které chcete ignorovat, oddělte je pomocí nových řádků v hodnotě vlastnosti. V tomto případě je snazší upravit hodnotu vlastnosti pomocí externího editoru:

svn propedit svn:ignore .
782
Jason Cohen

Zde je příklad struktury adresářů:

\project
    \source
    \cache
    \other

Když v project vidíte, že váš adresář cache není přidán a zobrazí se jako takový.

> svn st
M  source
?  cache

Chcete-li nastavit vlastnost ignore, proveďte

svn propset svn: ignore cache.

kde svn:ignore je název vlastnosti, kterou nastavujete, cache je hodnota vlastnosti a . je adresář, na kterém tuto vlastnost nastavujete. Mělo by být nadřazeným adresářem adresáře cache, který potřebuje vlastnost.

Kontrola nastavení vlastností:

> svn proplist
Properties on '.':
  svn:ignore

Chcete-li zobrazit hodnotu svn:ignore:

> svn propget svn:ignore
cache

Odstranění dříve nastavených vlastností:

svn propdel svn:ignore
401
craigb

Důležité je uvést:

Na příkazovém řádku nemůžete použít

svn add *

To také přidá ignorované soubory, protože příkazový řádek rozbalí * a proto svn add věří, že chcete přidat všechny soubory. Použijte proto toto místo:

svn add --force .
129
binco

Vzhledem k tomu, že jsem strávil nějaký čas pokusem o to, aby to fungovalo, je třeba poznamenat, že pokud soubory již existují v SVN, musíte je svn delete a poté upravit vlastnost svn:ignore.

Vím, že se to jeví jako samozřejmé, ale v mém seznamu ? se zobrazovaly jako svn status, když jsem si myslel, že je bude ignorovat lokálně.

79
Kai

Chcete-li to mírně rozbalit, pokud to děláte pomocí nástroje příkazového řádku svn, chcete zadat:

svn propedit svn:ignore path/to/dir

který otevře váš textový editor, pak zadejte '*', chcete-li ignorovat vše uvnitř, a uložte + quit - to bude zahrnovat samotný adresář ve svn, ale ignorovat všechny soubory uvnitř, ignorovat adresář, použít cestu rodiče a zadejte název adresáře v souboru. Po uložení spusťte aktualizaci ('svn up') a poté zaškrtněte příslušnou cestu.

69
Greg

Nastavte vlastnost svn:ignore v nadřazeném adresáři:

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

To přepíše aktuální hodnotu svn:ignore. Upravíte hodnotu pomocí:

$ svn pe svn:ignore .

Který otevře váš editor. Můžete přidat více vzorů, jeden na řádek.

Aktuální hodnotu můžete zobrazit pomocí:

$ svn pg svn:ignore .

Pokud používáte grafické uživatelské rozhraní, měla by být k dispozici možnost nabídky.

28
Frank Szczerba

Děkujeme za všechny výše uvedené příspěvky. Chtěl bych se jen podělit o některé další informace z mých zkušeností a ignorovat soubory.


Pokud jsou složky již pod kontrolou kontroly

Po svn import a svn co soubory, co obvykle děláme poprvé.

Všechny mezipaměti runtime, složky příloh budou pod kontrolou verzí. tak, dříve svn ps svn: ignore , musíme jej odstranit z úložiště.

S verzí SVN 1.5 výše můžeme použít svn del --keep-local your_folder, ale pro dřívější verzi je moje řešení následující:

  1. svn export čistá kopie vašich složek (bez skryté složky .svn)
  2. svn del místní a repozitář,
  3. svn ci
  4. Zkopírujte složky zpět
  5. Do svn st a potvrďte, že složky jsou označeny jako '?'
  6. Nyní můžeme udělat svn ps podle řešení

Když chceme více než jednu složku ignorovat

  • V jednom adresáři mám dvě složky, které je třeba nastavit jako svn:ignore
  • Pokud ho nastavíme, druhý bude odstraněn.
  • Pak se divíme, že potřebujeme svn pe

svn pe bude muset upravit textový soubor a tento příkaz můžete použít v případě potřeby pro nastavení textového editoru pomocí vi :

export SVN_EDITOR=vi
  1. Pomocí "o" můžete otevřít nový řádek
  2. Zadejte všechny názvy složek, které chcete ignorovat
  3. Stiskem klávesy „esc“ můžete uniknout z režimu úprav
  4. Zadejte ": wq" a pak stiskněte Enter uložit a ukončit

Soubor vypadá takto:

runtime
cache
attachments
assets
20
Elliot Yap

Nejprve ji odeberte ...

Pokud je váš adresář foo již pod kontrolou verze, nejprve jej odeberte pomocí:

svn rm --keep-local foo

... pak ignorovat:

svn propset svn:ignore foo .
19
matt burns

... a pokud chcete ignorovat více než jeden adresář (řekněme build/temp/ a *.tmp), můžete to buď provést ve dvou krocích (ignorovat první a upravit ignorované vlastnosti (viz další odpovědi zde) nebo napsat něco jako

svn propset svn:ignore "build
temp
*.tmp" .

na příkazovém řádku.

12
DerMike

Pokud používáte konkrétní SVN klienta TortoiseSVN , pak na commit máte možnost kliknout pravým tlačítkem myši a vybrat "Add to ignore list".

11
Michael Lang

Příkaz ignorovat více položek je trochu složitější a vyžaduje zpětná lomítka.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

Tento příkaz bude v aktuálním adresáři ignorovat jakékoli jméno cache, tmp, null a and_so_on.

6
James Stroud

Měl jsem problémy s ignorováním vnořených adresářů; horní adresář, který jsem chtěl ignorovat, by se nezobrazoval se stavem „svn“, ale všichni subdirs. To je patrně samozřejmé pro všechny ostatní, ale myslel jsem, že to budu sdílet

PŘÍKLAD:

/kufr

/ trunk/cache

/ trunk/cache/subdir1

/ trunk/cache/subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
5
brainycat

"Děkuji vám" svn za takový ohavný, falešný a obtížný způsob ignorování souborů.

Tak jsem napsal skript svn-ignore-all :

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Chcete-li ignorovat specifický seznam souborů/cest, můžeme použít tuto variantu svn-ignore . Myslím, že svn-ignore-all by mělo být jako xargs svn-ignore.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Ještě jedna věc: Mám tendenci znečišťovat mé svn pokladny s mnoha náhodnými soubory. Když nastane čas, aby se dopustil, přesunu tyto soubory do 'starého' podadresáře a řeknu svn, aby ignoroval 'starý'.

4
Sam Watkins

Bash jeden liner pro více ignorování:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
4
Fedir RYKHTIK

UCHOVÁVAT SMĚRNICE, KTERÉ SVN NEPŘEHLEDUJÍ:

  1. odstraní se soubory z úložiště, ale ponechá adresář pod kontrolou SVN:

svn delete --keep-local cesta/directory_to_keep/*

  1. pak nastavte, aby byl adresář (a veškerý obsah) ignorován:

svn propset svn: ignore "*" cesta/directory_to_keep

3
sheasie

Pokud je adresář projektu pojmenován/Project a adresář mezipaměti je pojmenován/Project/Cache, musíte nastavit vlastnost Subversion na/Project. Název vlastnosti by měl být "svn: ignore" a hodnota vlastnosti by měla být "Cache".

Více informací o vlastnostech naleznete na stránce this page v příručce Subversion.

3

Jasonova odpověď bude stačit. Místo nastavení svn: ignore to "." v adresáři mezipaměti můžete zahrnout "cache" do vlastnosti svn: ignore v adresáři parent directory, v případě, že adresář cache není vždy přítomen. Dělám to na několika "throwaway" složek.

3
harpo

Pokud používáte frontend pro SVN jako TortoiseSVN nebo nějaký druh integrace IDE, měla by být ve stejném menu také volba ignore jako operace commit/add.

2

Protože používáte verze, je to opravdu snadné:

  • Prohlédněte si odhlášenou kopii
  • Klepněte na adresář, který chcete ignorovat
  • V poli "Ignorovat na pravé straně klepněte na tlačítko Upravit
  • Chcete-li ignorovat všechny soubory (nebo * .jpg pro soubory jpg atd.), Zadejte *. *
1
Andrew

Nastavte svn: ignore property . Většina UI svn nástroje mají způsob, jak to udělat, stejně jako diskuse v příkazovém řádku v odkazu.

1
Joe Skora

Řešené s Eclipse následujícím způsobem:

Nejprve proveďte synchronizaci složky s projektem:

team -> synchronizovat

V dalším pohledu, pohledu týmu, můžete vidět všechny prostředky, které můžete zavést na server SVN.

Vyberte zdrojovou složku zdroje, který chcete ignorovat, a pak jej můžete ignorovat

team -> přidat do svn:ignore.

Poté, v okně pro potvrzení, vyberte první možnost: "ignore by name".

Například, pokud chci ignorovat cílovou složku a jejich zdroje .class, udělám synchronizaci a v zobrazení synchronizace vyberu cílovou složku. Po tom si vyberu

team-> přidat

na svn:ignore a pak potvrdím první volbu v okně potvrzení.

1
Antonio Martin

Sledujte také vaše koncové lomítka. Zjistil jsem, že včetně images/* v mém souboru nastavení ignorovat ./images/. Když jsem běžel svn status -u, stále ukazoval ? images. Tak jsem změnil nastavení ignorování na images, žádné lomítka. Uskutečnil kontrolu stavu a ten to odstranil.

1
cdmo

Poté, co jsem ztratil spoustu času hledáním toho, jak to udělat, jsem se rozhodl, že to nebude těžké najít slušné vysvětlení.

Nejprve nechte strukturu vzorku

$ svn st? projekt/kufr/cíl? project/trunk/myfile.x

1 - nejprve nakonfigurujte editor, v mycase vim export SVN_EDITOR = vim

2 - “svn propedit svn: ignore project/trunk /” otevře nový soubor a můžete přidat své soubory a podadresář v našem případě “target” uložit a zavřít soubor a funguje

$ svn st? project/trunk/myfile.x

dík.

0
Bruno Marinho