Ich möchte ein Repository über die CLI in Gitea erstellen

4 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

Hallo, ich bin unfähig.
Ich möchte auf Gitea pushen, während ich auf Github pushe, aber es ist mühsam, also möchte ich es auch über die CLI bedienen können.
Das liegt daran, dass ich nicht alles als Github-Spiegel spiegeln möchte, sondern nur in gewisser Weise einfach pushen können möchte.

API-Schlüssel generieren

Generieren Sie einen API-Schlüssel in Gitea.
images

API-Anfrage mit curl

Es ist zu mühsam, die curl-URL jedes Mal einzufügen, also werde ich sie in eine Funktion umwandeln.
Fügen Sie Folgendes zu .bashrc hinzu:

ga() {
  curl -X POST "https://git.domain.tld/api/v1/user/repos" \
  -H "Content-Type: application/json" \
  -H "Authorization: token GITEA_API_TOKEN" \
  -d "{
    \"name\": \"$1\",
    \"private\": $2
  }"
}

Laden Sie es:

source ~/.bashrc

Und als ich es ausführte, gab es einen Fehler.

$ ga test false
{"message":"token does not have at least one of required scope(s), required=[write:user], token scope=write:repository","url":"https://git.domain.tld/api/swagger"}

Ich habe Lese- und Schreibzugriff auf das Repository gewährt, aber es scheint, dass auch Schreibberechtigungen für den Benutzer erforderlich sind.

Es hat geklappt

Daher muss ich einen booleschen Wert für das zweite Argument übergeben, der angibt, ob es sich um ein privates Repository handelt, und das Repository wie folgt erstellen:

ga testrepo false

Aber der JSON-Rückgabewert ist zu lang.
Ich brauche nur den Wert der Remote-URL, also extrahiere ich ihn mit jq:

ga() {
  curl -X POST "https://git.domain.tld/api/v1/user/repos" \
  -H "Content-Type: application/json" \
  -H "Authorization: token GITEA_API_TOKEN" \
  -d "{
    \"name\": \"$1\",
    \"private\": $2
  }" |\
  jq .ssh_url
}

Endgültig

$ ga testa false
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2227    0  2180  100    47   2471     53 --:--:-- --:--:-- --:--:--  2524
"ssh://git@git.domain.tld:port/haturatu/testa.git"

Der Fortschrittsbalken von wget und ähnlichem kann mit einer Option deaktiviert werden, aber wie kann ich diesen Fortschrittsbalken deaktivieren, wenn er über eine Pipe übergeben wird?

Related Posts