git-bundle(1): Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '{{manpage|section=1|title=git-bundle}} == NAMN == git-bundle - Flytta objekt och referenser med arkiv == SYNOPSIS == '''git bundle''' create [-q | --quiet | --progress] [--version=<version>] <fil> <git-rev-list-args> '''git bundle''' verify [-q | --quiet] <fil> '''git bundle''' list-heads <fil> [<refnamn>...] '''git bundle''' unbundle [--progress] <fil> [<refnamn>...] == BESKRIVNING == Skapa, packa upp och hantera "bundle"-filer. Bundles används...') |
Admin (diskussion | bidrag) |
||
| (En mellanliggande sidversion av samma användare visas inte) | |||
| Rad 1: | Rad 1: | ||
== NAMN == | == NAMN == | ||
git-bundle - Flytta objekt och referenser med arkiv | git-bundle - Flytta objekt och referenser med arkiv | ||
| Rad 52: | Rad 50: | ||
* create [alternativ] <fil> <git-rev-list-args> | * create [alternativ] <fil> <git-rev-list-args> | ||
:: Används för att skapa en bundle med namnet ''fil''. Detta kräver | :: Används för att skapa en bundle med namnet ''fil''. Detta kräver | ||
argumenten ''<git-rev-list-args>'' för att definiera bundle-innehållet. | |||
''alternativ'' innehåller de alternativ som är specifika för | |||
underkommandot ''git bundle create''. Om ''fil'' är '''-''' skrivs | |||
bundlen till stdout. | |||
* verify <fil> | * verify <fil> | ||
:: Används för att kontrollera att en bundle-fil är giltig och kommer | :: Används för att kontrollera att en bundle-fil är giltig och kommer | ||
att tillämpas rent på det aktuella arkivet. Detta inkluderar | |||
kontroller av själva bundle-formatet samt kontroll av att de | |||
förutsatta commiterna existerar och är fullständigt länkade i det | |||
aktuella arkivet. Sedan skriver ''git bundle'' ut en lista över | |||
eventuella saknade commits. Slutligen skrivs information om | |||
ytterligare funktioner, såsom "objektfilter", ut. Se "Capabilities" | |||
i [[gitformat-bundle(5)]] för mer information. Returkoden är noll | |||
vid framgång, men kommer att vara nollskild om bundle-filen är | |||
ogiltig. Om ''fil'' är '''-''' läses bundlen från stdin. | |||
* list-heads <fil> [<refnamn>...] | * list-heads <fil> [<refnamn>...] | ||
:: Listar de referenser som definieras i bundlen. Om det följs av en | :: Listar de referenser som definieras i bundlen. Om det följs av en | ||
lista med referenser skrivs endast referenser som matchar de givna | |||
ut. Om ''fil'' är '''-''' läses bundlen från stdin. | |||
* unbundle <fil> | * unbundle <fil> | ||
:: Skickar objekten i bundlen till ''git index-pack'' för lagring i | :: Skickar objekten i bundlen till ''git index-pack'' för lagring i | ||
arkivet och skriver sedan ut namnen på alla definierade referenser. | |||
Om en lista med referenser anges skrivs endast referenser som | |||
matchar de i listan ut. Detta kommando är egentligen ett | |||
grundläggande kommando, avsett att endast anropas av ''git fetch''. | |||
Om ''fil'' är '''-''' läses bundlen från stdin. | |||
* <git-rev-list-args> | * <git-rev-list-args> | ||
:: En lista med argument, acceptabla för ''git rev-parse'' och ''git | :: En lista med argument, acceptabla för ''git rev-parse'' och ''git | ||
rev-list'' (och som innehåller en namngiven referens, se | |||
SPECIFIERA REFERENSER nedan), som specificerar de specifika objekt | |||
och referenser som ska transporteras. Till exempel, '''master~10..master''' | |||
gör att den aktuella master-referensen packas tillsammans med alla | |||
objekt som lagts till sedan dess tionde förfäders-commit. Det finns | |||
ingen explicit gräns för antalet referenser och objekt som kan | |||
packas. | |||
* [<refnamn>...] | * [<refnamn>...] | ||
:: En lista med referenser som används för att begränsa de referenser | :: En lista med referenser som används för att begränsa de referenser | ||
som rapporteras som tillgängliga. Detta är huvudsakligen användbart | |||
för ''git fetch'', som förväntar sig att endast ta emot de | |||
referenser som begärts och inte nödvändigtvis allt i packet (i detta | |||
fall fungerar ''git bundle'' som ''git fetch-pack''). | |||
* --progress | * --progress | ||
:: Förloppsstatus rapporteras som standard på standardfelströmmen när | :: Förloppsstatus rapporteras som standard på standardfelströmmen när | ||
den är ansluten till en terminal, om inte -q anges. Denna flagga | |||
tvingar fram förloppsstatus även om standardfelströmmen inte är | |||
riktad till en terminal. | |||
* --version=<version> | * --version=<version> | ||
:: Ange bundle-versionen. Version 2 är det äldre formatet och kan | :: Ange bundle-versionen. Version 2 är det äldre formatet och kan | ||
endast användas med SHA-1-arkiv; den nyare version 3 innehåller | |||
funktioner som tillåter tillägg. Standard är det äldsta format som | |||
stöds, baserat på den hash-algoritm som används. | |||
* -q, --quiet | * -q, --quiet | ||
:: Denna flagga gör att kommandot inte rapporterar sitt förlopp på | :: Denna flagga gör att kommandot inte rapporterar sitt förlopp på | ||
standardfelströmmen. | |||
== SPECIFIERA REFERENSER == | == SPECIFIERA REFERENSER == | ||
Nuvarande version från 9 april 2025 kl. 05.35
NAMN
git-bundle - Flytta objekt och referenser med arkiv
SYNOPSIS
git bundle create [-q | --quiet | --progress]
[--version=<version>] <fil> <git-rev-list-args>
git bundle verify [-q | --quiet] <fil> git bundle list-heads <fil> [<refnamn>...] git bundle unbundle [--progress] <fil> [<refnamn>...]
BESKRIVNING
Skapa, packa upp och hantera "bundle"-filer. Bundles används för "offline"-överföring av Git-objekt utan en aktiv "server" på andra sidan nätverksanslutningen.
De kan användas för att skapa både inkrementella och fullständiga säkerhetskopior av ett arkiv (se exemplet "fullständig säkerhetskopiering" i "EXEMPEL"), och för att vidarebefordra tillståndet för referenserna i ett arkiv till ett annat (se det andra exemplet).
Git-kommandon som hämtar eller på annat sätt "läser" via protokoll som ssh:// och https:// kan också fungera på bundle-filer. Det är möjligt att git-clone(1) ett nytt arkiv från en bundle, att använda git-fetch(1) för att hämta från en, och att lista referenserna som finns i den med git-ls-remote(1). Det finns inget motsvarande "skriv"-stöd, dvs. en git push in i en bundle stöds inte.
BUNDLE-FORMAT
Bundles är .pack-filer (se git-pack-objects(1)) med ett huvud som indikerar vilka referenser som finns i bundlen.
Liksom själva det packade arkivformatet kan bundles antingen vara självständiga eller skapas med hjälp av exkluderingar. Se avsnittet "OBJEKTFÖRUTSÄTTNINGAR" nedan.
Bundles som skapats med hjälp av revisionsundantag är "tunna pack" som skapats med alternativet --thin till git-pack-objects(1), och uppackade med alternativet --fix-thin till git-index-pack(1).
Det finns inget alternativ för att skapa en "tjock pack" när man använder revisionsundantag, och användare bör inte oroa sig för skillnaden. Genom att använda "tunna pack" är bundles som skapats med undantag mindre i storlek. Att de är "tunna" under huven noteras här endast som en kuriositet och som en referens till annan dokumentation.
Se gitformat-bundle(5) för mer information och diskussionen om "tunn pack" i gitformat-pack(5) för ytterligare detaljer.
ALTERNATIV
- create [alternativ] <fil> <git-rev-list-args>
- Används för att skapa en bundle med namnet fil. Detta kräver
argumenten <git-rev-list-args> för att definiera bundle-innehållet. alternativ innehåller de alternativ som är specifika för underkommandot git bundle create. Om fil är - skrivs bundlen till stdout.
- verify <fil>
- Används för att kontrollera att en bundle-fil är giltig och kommer
att tillämpas rent på det aktuella arkivet. Detta inkluderar kontroller av själva bundle-formatet samt kontroll av att de förutsatta commiterna existerar och är fullständigt länkade i det aktuella arkivet. Sedan skriver git bundle ut en lista över eventuella saknade commits. Slutligen skrivs information om ytterligare funktioner, såsom "objektfilter", ut. Se "Capabilities" i gitformat-bundle(5) för mer information. Returkoden är noll vid framgång, men kommer att vara nollskild om bundle-filen är
ogiltig. Om fil är - läses bundlen från stdin.
- list-heads <fil> [<refnamn>...]
- Listar de referenser som definieras i bundlen. Om det följs av en
lista med referenser skrivs endast referenser som matchar de givna ut. Om fil är - läses bundlen från stdin.
- unbundle <fil>
- Skickar objekten i bundlen till git index-pack för lagring i
arkivet och skriver sedan ut namnen på alla definierade referenser. Om en lista med referenser anges skrivs endast referenser som matchar de i listan ut. Detta kommando är egentligen ett grundläggande kommando, avsett att endast anropas av git fetch. Om fil är - läses bundlen från stdin.
- <git-rev-list-args>
- En lista med argument, acceptabla för git rev-parse och git
rev-list (och som innehåller en namngiven referens, se SPECIFIERA REFERENSER nedan), som specificerar de specifika objekt och referenser som ska transporteras. Till exempel, master~10..master gör att den aktuella master-referensen packas tillsammans med alla objekt som lagts till sedan dess tionde förfäders-commit. Det finns ingen explicit gräns för antalet referenser och objekt som kan packas.
- [<refnamn>...]
- En lista med referenser som används för att begränsa de referenser
som rapporteras som tillgängliga. Detta är huvudsakligen användbart för git fetch, som förväntar sig att endast ta emot de referenser som begärts och inte nödvändigtvis allt i packet (i detta fall fungerar git bundle som git fetch-pack).
- --progress
- Förloppsstatus rapporteras som standard på standardfelströmmen när
den är ansluten till en terminal, om inte -q anges. Denna flagga
tvingar fram förloppsstatus även om standardfelströmmen inte är riktad till en terminal.
- --version=<version>
- Ange bundle-versionen. Version 2 är det äldre formatet och kan
endast användas med SHA-1-arkiv; den nyare version 3 innehåller funktioner som tillåter tillägg. Standard är det äldsta format som stöds, baserat på den hash-algoritm som används.
- -q, --quiet
- Denna flagga gör att kommandot inte rapporterar sitt förlopp på
standardfelströmmen.
SPECIFIERA REFERENSER
Revisioner måste åtföljas av referensnamn för att packas i en bundle. Alternativt kan --all användas för att packa alla referenser.
Mer än en referens kan packas, och mer än en uppsättning förutsatta objekt kan specificeras. De objekt som packas är de som inte finns i unionen av förutsättningarna.
Kommandot git bundle create löser referensnamnen åt dig med samma regler som git rev-parse --abbrev-ref=loose. Varje förutsättning kan specificeras explicit (t.ex. ^master~10) eller implicit (t.ex. master~10..master, --since=10.days.ago master).
Alla dessa enkla fall är OK (förutsatt att vi har en "master"- och en "next"-gren):
$ git bundle create master.bundle master $ echo master | git bundle create master.bundle --stdin $ git bundle create master-and-next.bundle master next $ (echo master; echo next) | git bundle create master-and-next.bundle --stdin
Och det är dessa också (och samma men utelämnade --stdin-exempel):
$ git bundle create recent-master.bundle master~10..master $ git bundle create recent-updates.bundle master~10..master next~5..next
Ett revisionsnamn eller ett intervall vars högra sida inte kan lösas till en referens accepteras inte:
$ git bundle create HEAD.bundle $(git rev-parse HEAD) fatal: Refusing to create empty bundle. $ git bundle create master-yesterday.bundle master~10..master~5 fatal: Refusing to create empty bundle.
OBJEKTFÖRUTSÄTTNINGAR
När man skapar bundles är det möjligt att skapa en självständig bundle som kan packas upp i ett arkiv utan gemensam historik, samt att tillhandahålla negativa revisioner för att exkludera objekt som behövs i de tidigare delarna av historiken.
Att mata en revision som new till git bundle create skapar en bundle-fil som innehåller alla objekt som kan nås från revisionen new. Denna bundle kan packas upp i vilket arkiv som helst för att erhålla en fullständig historik som leder till revisionen new:
$ git bundle create full.bundle new
Ett revisionsintervall som old..new kommer att producera en bundle-fil som kräver att revisionen old (och alla objekt som kan nås från den) existerar för att bundlen ska kunna "unbundle"-as:
$ git bundle create full.bundle old..new
En självständig bundle utan några förutsättningar kan extraheras var som helst, även i ett tomt arkiv, eller klonas från (dvs. new, men inte old..new).
Det är OK att vara försiktig och låta bundle-filen innehålla objekt som redan finns på destinationen, eftersom dessa ignoreras vid uppackning på destinationen.
Om du vill tillhandahålla samma uppsättning referenser som en klon direkt från källarkivet skulle få, använd --branches --tags för <git-rev-list-args>.
Kommandot git bundle verify kan användas för att kontrollera om ditt mottagararkiv har de nödvändiga förutsatta commiterna för en bundle.
EXEMPEL
Vi kommer att diskutera två fall:
1. Ta en fullständig säkerhetskopia av ett arkiv 2. Överföra historiken för ett arkiv till en annan maskin när de två maskinerna inte har någon direkt anslutning
Först ska vi betrakta en fullständig säkerhetskopia av arkivet. Följande kommando kommer att ta en fullständig säkerhetskopia av arkivet i den meningen att alla referenser inkluderas i bundlen:
$ git bundle create backup.bundle --all
Men observera återigen att detta endast gäller referenserna, dvs. du kommer endast att inkludera referenser och commits som kan nås från dessa referenser. Du kommer inte att inkludera annat lokalt tillstånd, såsom innehållet i indexet, arbetskopian, stashen, arkivspecifik konfiguration, krokar etc.
Du kan senare återställa det arkivet genom att till exempel använda git-clone(1):
$ git clone backup.bundle <ny katalog>
För nästa exempel, antag att du vill överföra historiken från ett arkiv R1 på maskin A till ett annat arkiv R2 på maskin B. Av någon anledning är direkt anslutning mellan A och B inte tillåten, men vi kan flytta data från A till B via någon mekanism (CD, e-post etc.). Vi vill uppdatera R2 med utveckling som gjorts på grenen master i R1.
För att starta processen kan du först skapa en bundle som inte har några förutsättningar. Du kan använda en tagg för att komma ihåg upp till vilken commit du senast bearbetade, för att göra det enkelt att senare uppdatera det andra arkivet med en inkrementell bundle:
maskinA$ cd R1 maskinA$ git bundle create file.bundle master maskinA$ git tag -f lastR2bundle master
Sedan överför du file.bundle till målmaskinen B. Eftersom denna bundle inte kräver att något befintligt objekt extraheras kan du skapa ett nytt arkiv på maskin B genom att klona från den:
maskinB$ git clone -b master /home/mig/tmp/file.bundle R2
Detta kommer att definiera en fjärranslutning med namnet "origin" i det resulterande arkivet som låter dig hämta och dra från bundlen. Filen GIT\_DIR/config i R2 kommer att ha en post som denna\: \[remote "origin"\] url \= /home/mig/tmp/file\.bundle fetch \= refs/heads/\*\:refs/remotes/origin/\* För att uppdatera det resulterande mitt\.git\-arkivet kan du hämta eller dra efter att ha ersatt bundlen som lagras på /home/mig/tmp/file\.bundle med inkrementella uppdateringar\. Efter att ha arbetat lite mer i det ursprungliga arkivet kan du skapa en inkrementell bundle för att uppdatera det andra arkivet\: maskinA cd R1
maskinA$ git bundle create file.bundle lastR2bundle..master maskinA$ git tag -f lastR2bundle master
Sedan överför du bundlen till den andra maskinen för att ersätta /home/mig/tmp/file.bundle och drar från den.
maskinB$ cd R2 maskinB$ git pull
Om du vet upp till vilken commit det avsedda mottagararkivet bör ha de nödvändiga objekten kan du använda den kunskapen för att specificera förutsättningarna, vilket ger en brytpunkt för att begränsa de revisioner och objekt som hamnar i den resulterande bundlen. I föregående exempel användes taggen lastR2bundle för detta ändamål, men du kan använda alla andra alternativ som du skulle ge till kommandot git-log(1). Här är fler exempel:
Du kan använda en tagg som finns i båda:
$ git bundle create mybundle v1.0.0..master
Du kan använda en förutsättning baserad på tid:
$ git bundle create mybundle --since=10.days master
Du kan använda antalet commits:
$ git bundle create mybundle -10 master
Du kan köra git-bundle verify för att se om du kan extrahera från en bundle som skapades med en förutsättning:
$ git bundle verify mybundle
Detta kommer att lista vilka commits du måste ha för att kunna extrahera från bundlen och kommer att ge fel om du inte har dem.
En bundle från ett mottagararkivs synvinkel är precis som ett vanligt arkiv som det hämtar eller drar från. Du kan till exempel mappa referenser när du hämtar:
$ git fetch mybundle master:lokalRef
Du kan också se vilka referenser det erbjuder:
$ git ls-remote mybundle
DISKUSSION
Ett naivt sätt att göra en fullständig säkerhetskopia av ett arkiv är att använda något i stil med cp -r <arkiv> <destination>. Detta avråds eftersom arkivet kan skrivas till under kopieringen. I sin tur kan vissa filer på <destination> skadas.
Det är därför det rekommenderas att använda Git-verktyg för att göra säkerhetskopior av arkiv, antingen med detta kommando eller med t.ex. git-clone(1). Men kom ihåg att dessa verktyg inte hjälper dig att säkerhetskopiera annat tillstånd än referenser och commits. Med andra ord hjälper de dig inte att säkerhetskopiera innehållet i indexet, arbetskopian, stashen, arkivspecifik konfiguration, krokar etc.
Se även gitfaq(7), avsnitt "TRANSFERS" för en diskussion om de problem som är förknippade med filsynkronisering mellan system.
FILFORMAT
GIT
Del av git(1)-sviten
KOLOFON
Den här sidan är en del av projektet git (Git distribuerat versionshanteringssystem). Information om projektet finns på <⟨http://git-scm.com/⟩>. Om du har en felrapport för den här manualsidan, se <⟨http://git-scm.com/community⟩>. Den här sidan hämtades från projektets uppströms Git-arkiv <⟨https://github.com/git/git.git⟩> den 2025-02-02. (Vid den tidpunkten var datumet för den senast hittade commiten i arkivet 2025-01-31.) Om du upptäcker några renderingsproblem i den här HTML-versionen av sidan, eller om du tror att det finns en bättre eller mer aktuell källa för sidan, eller om du har korrigeringar eller förbättringar av informationen i den här KOLOFONEN (som *inte* är en del av den ursprungliga manualsidan), skicka ett e-postmeddelande till man-pages@man7.org
Sidslut
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/git-bundle.1.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.