Kürzester Weg zum Herunterladen von GitHub

7

Auf diese Weise lade ich verschiedene Hauptzweige von GitHub herunter und möchte ein schöneres Skript haben (und vielleicht zuverlässiger?).

wget -P ~/ https://github.com/user/repository/archive/master.zip
unzip ~/master.zip
mv ~/*-master ~/dir-name

Kann das irgendwie auf eine Zeile gekürzt werden, vielleicht mit Teer und Pfeife?

Bitte beheben Sie Probleme beim direkten Herunterladen in das Home-Verzeichnis ~/und haben Sie einen bestimmten Namen für das Verzeichnis ( mvwirklich benötigt?).

kürzer
quelle
21
Warum nicht das Repository klonen?
Kusalananda
4
@ user1404316 Ja, weil "Endbenutzer" niemals "git pull" ausführen müssen, weil sie nie daran interessiert sind, die neueste Version zu kompilieren oder auszuführen git showoder git logzu sehen, was sich zwischen den Versionen geändert hat.
Cas
2
scheint in letzter Zeit eine beliebte Frage zu sein: eins und zwei
Jeff Schaller
2
@ JeffSchaller wahrscheinlich alle eine Person. Die anderen beiden Fragen waren definitiv.
Cas
1
unzipsollte ein Argument für ein Verzeichnis nehmen, in das extrahiert werden soll, damit Sie zuerst das übergeordnete Verzeichnis erstellen können
Will Crawford

Antworten:

14

Der kürzeste Weg, der zu sein scheint, was Sie wollen, wäre git clone https://github.com/user/repository --depth 1 --branch=master ~/dir-name. Dadurch wird nur der Hauptzweig kopiert, so wenig zusätzliche Informationen wie möglich kopiert und in gespeichert ~/dir-name.

tjespe
quelle
Vielen Dank! Kleine Frage. Mir ist aufgefallen, dass neben dem Herunterladen des Repos auch ein Verzeichnis .gitmit vielen Dateien erstellt wurde. Gibt es eine Notwendigkeit, dieses Verzeichnis zu erstellen? Gibt es eine Möglichkeit, das Erstellen zu vermeiden?
kürzer
2
@shorter, es sollte nicht zu viele Dateien in .git geben, und nein, Sie können nicht darauf verzichten. Sie können jedoch alle anderen Dateien nach dem Kompilieren entfernen und später bei Bedarf mit wiederherstellen git checkout. Als zusätzlichen Bonus müssen Sie, wenn Sie in Zukunft die neueste Version erhalten möchten, git pullnur eine kleine Datenmenge herunterladen, um darzustellen, was sich geändert hat, anstatt das Ganze erneut herunterzuladen.
Psusi
@shorter Solange Sie git verwenden, weiß ich nicht, wie Sie das Erstellen des .gitVerzeichnisses vermeiden können , aber Sie können es sicher löschen, nachdem der Befehl ausgeführt wurde. Ich kann mir keinen Grund vorstellen, warum es ein Problem wäre, es zu schaffen. Wenn Sie dies tun, verlieren Sie jedoch die Möglichkeit, problemlos auf eine zukünftige Revision zu aktualisieren.
David Z
@shorter Einen benutzerdefinierten .git/Ordner finden Sie unter: stackoverflow.com/questions/5337025/…
Luc
4

Dadurch werden die Dateien in ein neues Verzeichnis geklont, das erstellt wird:

git clone [email protected]:whatever NonExistentNewFolderName
LinuxSecurityFreak
quelle
3

Beginnen wir mit der Bash-Funktion, die ich für meinen persönlichen Gebrauch zur Hand hatte:

wget_github_zip() {
  if [[ $1 =~ ^-+h(elp)?$ ]] ; then
    printf "%s\n" "Downloads a github snapshot of a master branch.\nSupports input URLs of the forms */repo_name, *.git, and */master.zip"
    return
    fi
  if [[ ${1} =~ /archive/master.zip$ ]] ; then
    download=${1}
    out_file=${1/\/archive\/master.zip}
    out_file=${out_file##*/}.zip
  elif [[ ${1} =~ .git$ ]] ; then
    out_file=${1/%.git}
    download=${out_file}/archive/master.zip
    out_file=${out_file##*/}.zip
  else
    out_file=${1/%\/} # remove trailing '/'
    download=${out_file}/archive/master.zip
    out_file=${out_file##*/}.zip
    fi
  wget -c ${download} -O ${out_file}
  }

Sie möchten, dass die Datei immer master.zip heißt und immer in Ihr Home-Verzeichnis heruntergeladen wird.

wget_github_zip() {
  if [[ $1 =~ ^-+h(elp)?$ ]] ; then
    printf "%s\n" "Downloads a github snapshot of a master branch.\nSupports input URLs of the forms */repo_name, *.git, and */master.zip"
    return
    fi
  if [[ ${1} =~ /archive/master.zip$ ]] ; then
    download=${1}
  elif [[ ${1} =~ .git$ ]] ; then
    out_file=${1/%.git}
    download=${out_file}/archive/master.zip
  else
    out_file=${1/%\/} # remove trailing '/'
    download=${out_file}/archive/master.zip
    fi
  wget -c ${download} -O ~/master.zip && unzip ~/master.zip && mv ~/master.zip ~/myAddons
  }

Es gibt jedoch einige Dinge zu beachten:

1) Mein ursprüngliches Skript gibt Ihnen für jeden Download einen eindeutigen Namen für die Download-Zip-Datei, basierend auf dem Namen des Github-Repositorys. Dies ist im Allgemeinen das, was die meisten Leute wirklich wollen, anstatt dass alles aufgerufen wird masterund sie anschließend manuell umbenannt werden müssen, um die Eindeutigkeit zu gewährleisten. In dieser Version des Skripts können Sie den Wert von $ out_file verwenden, um den entpackten Stammverzeichnisbaum eindeutig zu benennen.

2) Wenn Sie wirklich möchten, dass alle heruntergeladenen zipDateien benannt werden ~/master.zip, möchten Sie sie nach dem Entpacken löschen?

3) Da Sie anscheinend immer alles im Verzeichnis haben möchten ~/myAddons, warum nicht alle Vorgänge dort ausführen und sich die Notwendigkeit ersparen, das entpackte Verzeichnis zu verschieben?

user1404316
quelle
0

Hier sind einige Oneliner- Möglichkeiten:

# With WGET and JAR unzip:
wget -O - https://github.com/user/repo/archive/master.zip | jar xv

# With WGET and TAR unzip:
wget -O - https://github.com/user/repo/archive/master.tar.gz | tar xz

# With CURL and JAR unzip:
curl -L https://github.com/user/repo/archive/master.zip | jar xv

# With CURL and TAR unzip:
curl -L https://github.com/user/repo/archive/master.tar.gz | tar xz
Noam Manos
quelle