Apakah mungkin membuat repo jarak jauh pada GitHub dari CLI tanpa membuka browser?


348

Saya membuat repositori Git lokal baru:

~$ mkdir projectname
~$ cd projectname
~$ git init
~$ touch file1
~$ git add file1
~$ git commit -m 'first commit'

Apakah ada perintah git untuk membuat repo jarak jauh baru dan mendorong komit saya ke GitHub dari sini? Saya tahu ini bukan masalah besar untuk hanya menyalakan browser dan menuju ke Buat Gudang Baru , tetapi jika ada cara untuk mencapai ini dari CLI saya akan senang.

Saya membaca sejumlah besar artikel tetapi tidak ada yang saya temukan menyebutkan cara membuat repo jarak jauh dari CLI menggunakan perintah git. Artikel bagus Tim Lucas Menyiapkan repositori remote git baru adalah yang paling dekat yang saya temukan, tetapi GitHub tidak menyediakan akses shell .

Jawaban:


215

Anda dapat membuat repo GitHub melalui baris perintah menggunakan API GitHub. Lihat API repositori . Jika Anda menggulir ke bawah sekitar sepertiga dari jalan, Anda akan melihat bagian berjudul "Buat" yang menjelaskan cara membuat repo melalui API (tepat di atas itu adalah bagian yang menjelaskan cara garpu repo dengan API, juga ). Jelas Anda tidak dapat menggunakannya gituntuk melakukan ini, tetapi Anda dapat melakukannya melalui baris perintah dengan alat seperti curl.

Di luar API, tidak ada cara untuk membuat repo di GitHub melalui baris perintah. Seperti yang Anda perhatikan, GitHub tidak mengizinkan akses shell, dll. Jadi, selain dari GitHub API, satu-satunya cara untuk membuat repo adalah melalui antarmuka web GitHub.


73
Terima kasih banyak mipadi! Tidak tahu tentang API GitHub. Untuk orang lain dengan masalah yang sama, ini adalah apa dasarnya saya lakukan: curl -F 'login=username' -F 'token=API Token' https://github.com/api/v2/yaml/repos/create -F name=reponame. Token API Anda dapat ditemukan di situs GitHub, klik Pengaturan Akun , cari Informasi Administratif dan Token API (string panjang 32 karakter).
anddoutoi

1
Sepertinya ini sudah ketinggalan zaman, setidaknya saya tidak menemukan Token API di sana.
Joachim Breitner

12
Sintaks API Versi 3 yang diberikan di bawah ini melalui @bennedich stackoverflow.com/a/10325316/305633
JiminyCricket

2
@cseder: Git tidak mengharuskan ini untuk membuat repo, tetapi mengaturnya di GitHub tidak. Saya tidak berpikir Mercurial memungkinkan Anda membuat repo di server jauh dengan mendorong repo yang tidak ada.
mipadi

5
@cseder: Pertanyaannya adalah menanyakan apakah mungkin membuat repo jarak jauh di GitHub melalui API GitHub, bukan bagaimana membuat repo baru dan mendorongnya ke yang ada di GitHub.
mipadi

321

Perintah CLI untuk github API v3 (ganti semua kata kunci CAPS):

curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO"}'
# Remember replace USER with your username and REPO with your repository/application name!
git remote add origin git@github.com:USER/REPO.git
git push origin master

43
Masalah kecil dengan perintah pertama adalah Anda meninggalkan kata sandi GitHub di komputer Anda ~/.bash_history. Saya sarankan ganti -u 'USER:PASS'dengan -u 'USER', kemudian curl akan meminta kata sandi Anda secara interaktif.
ivanzoid

20
Untuk menjadikan repo pribadi dari awal, gunakan:curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO", "private":"true"}'
Joe Fletcher

3
Saya menulis skrip bash untuk menyelamatkan kita semua mengetik. Mengambil input pengguna dan memiliki default yang masuk akal: gist.github.com/robwierzbowski/5430952
RobW

3
Berikut ini cara menambahkannya sebagai alias git:git config --global alias.gh-create '!sh -c "curl -u \"USERNAME\" https://api.github.com/user/repos -d \"{\\\"name\\\":\\\"$1\\\"}\"" -'
Robin Winslow

13
Jangan lupa bahwa Anda dapat menghasilkan token akses dan menggunakannya dengan cara ini: curl https://api.github.com/user/repos?access_token=myAccessToken -d '{"name":"REPO"}'. :-)
Ionică Bizău

69

Ini dapat dilakukan dengan tiga perintah:

curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}'
git remote add origin git@github.com:nyeates/projectname.git
git push origin master

(diperbarui untuk API Github v3)


Penjelasan dari perintah-perintah ini ...

Buat repo github

    curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}'
  • curl adalah perintah unix (di atas juga berfungsi di mac) yang mengambil dan berinteraksi dengan URL. Biasanya sudah diinstal.
  • "-u" adalah parameter ikal yang menentukan nama pengguna dan kata sandi yang digunakan untuk otentikasi server.
    • Jika Anda hanya memberikan nama pengguna (seperti yang ditunjukkan pada contoh di atas) curl akan meminta kata sandi.
    • Jika Anda tidak ingin harus mengetikkan kata sandi, lihat dokumentasi api githubs pada Otentikasi
  • "-d" adalah parameter ikal yang memungkinkan Anda mengirim data POST dengan permintaan
  • "nama" adalah satu-satunya data POST yang diperlukan; Saya juga ingin memasukkan "deskripsi"
  • Saya menemukan bahwa itu baik untuk mengutip semua data POST dengan tanda kutip tunggal ''

Tentukan tempat untuk mendorong

git remote add origin git@github.com:nyeates/projectname.git
  • tambahkan definisi untuk lokasi dan keberadaan repo yang terhubung (jarak jauh) di github
  • "origin" adalah nama default yang digunakan oleh git untuk sumber asalnya
    • secara teknis tidak berasal dari github, tetapi sekarang repo github akan menjadi sumber rekaman
  • "git@github.com: nyeates" adalah koneksi ssh yang mengasumsikan bahwa Anda telah memasang keypair ssh tepercaya dengan github.

Dorong repo lokal ke github

git push origin master
  • dorong ke remote asal (github) dari cabang master lokal

54

Jika Anda menginstal alat Hub defunkt yang sangat baik , maka ini menjadi semudah

git create

Dalam kata-kata penulis, " hub adalah pembungkus baris perintah untuk git yang membuat Anda lebih baik di GitHub. "


3
Aku MENCINTAI hub! Juga berguna, adalah hub- atau seperti hubbiasanya alias untuk git... git fork, yang membuat garpu repo untuk pwdrepo kloning yang Anda masuki ... Yay.
Alex Grey

2
alat ini luar biasa! Anda perlu menyimpan token otentikasi untuk Anda sehingga Anda tidak perlu mengetikkan kata sandi berulang kali. Juga checkout plugin ZSH untuk github.
Dorian

19

Langkah sederhana (menggunakan git+ hub=> GitHub ):

  1. Instal Hub ( GitHub ).

    • OS X: brew install hub
    • memiliki Go :go get github.com/github/hub
    • jika tidak (memiliki Go juga):

      git clone https://github.com/github/hub.git && cd hub && ./script/build
      
  2. Pergi ke repo atau membuat satu kosong: mkdir foo && cd foo && git init.

  3. Jalankan:, hub createini akan menanyakan tentang kredensial GitHub untuk pertama kalinya.

    Pemakaian: hub create [-p] [-d DESCRIPTION] [-h HOMEPAGE] [NAME]

    Contoh: hub create -d Description -h example.com org_name/foo_repo

    Hub akan meminta nama pengguna & kata sandi GitHub saat pertama kali perlu mengakses API dan menukarnya dengan OAuthtoken, yang disimpannya ~/.config/hub.

    Untuk secara eksplisit memberi nama repositori baru, masukkan NAME, secara opsional dalam ORGANIZATION/NAMEbentuk untuk dibuat di bawah organisasi tempat Anda menjadi anggotanya.

    Dengan -p, buat repositori pribadi, dan dengan -ddan -hatur URLmasing-masing deskripsi dan beranda repositori .

    Untuk menghindari diminta, gunakan GITHUB_USERdan GITHUB_PASSWORDvariabel lingkungan.

  4. Kemudian komit dan dorong seperti biasa atau centang hub commit/ hub push.

Untuk bantuan lebih lanjut, jalankan: hub help.

Lihat juga: Mengimpor repositori Git menggunakan baris perintah di GitHub.


Bagaimana saya bisa mengatur variabel lingkungan GITHUB_USER dan GITHUB_PASSWORD?
Kasper

1
Mungkin Anda dapat mengekspornya, lihat: GH # 245 .
kenorb

1
Bekerja bagus untuk saya, perhatikan "hub" juga tersedia di MacPorts.
tiktak

Saya pikir ini yang saya cari! :)
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

11

Ada permata github resmi yang, saya pikir, melakukan ini. Saya akan mencoba menambahkan lebih banyak informasi ketika saya belajar, tetapi saya baru saja menemukan permata ini, jadi saya belum tahu banyak.

UPDATE: Setelah mengatur kunci API saya, saya dapat membuat repo baru di github melalui createperintah, namun saya tidak dapat menggunakan create-from-localperintah, yang seharusnya mengambil repo lokal saat ini dan membuat remote yang sesuai di github.

$ gh create-from-local
=> error creating repository

Jika ada yang memiliki wawasan tentang ini, saya ingin tahu apa yang saya lakukan salah. Sudah ada masalah yang diajukan .

UPDATE: Saya akhirnya berhasil ini. Saya tidak yakin bagaimana cara menghasilkan kembali masalah ini, tetapi saya baru mulai dari awal (menghapus folder .git)

git init
git add .emacs
git commit -a -m "adding emacs"

Sekarang baris ini akan membuat repo jarak jauh dan bahkan mendorongnya, tapi sayangnya saya tidak berpikir saya bisa menentukan nama repo yang saya inginkan. Saya ingin itu disebut "dotfiles" di github, tetapi permata gh hanya menggunakan nama folder saat ini, yang merupakan "jason" karena saya berada di folder rumah saya. (Saya menambahkan tiket meminta perilaku yang diinginkan)

gh create-from-local

Perintah ini, di sisi lain, memang menerima argumen untuk menentukan nama repo jarak jauh, tetapi itu dimaksudkan untuk memulai proyek baru dari awal, yaitu setelah Anda memanggil perintah ini, Anda mendapatkan repo jarak jauh baru yang melacak repo lokal dalam subfolder yang baru dibuat relatif terhadap posisi Anda saat ini, keduanya dengan nama yang ditentukan sebagai argumen.

gh create dotfiles

3
Proyek ini tidak memiliki pekerjaan selama beberapa tahun, tidak berhasil untuk saya, dan, seperti yang tersirat di sini , sudah mati. Tampaknya telah diganti oleh alat hub , seperti yang disarankan dalam jawaban ini .
jameshfisher

9

Untuk Dengan Cepat Membuat Repositori Jarak Jauh dengan Menggunakan Bash Shell

Sulit untuk mengetikkan kode lengkap setiap kali repositori dibuat

curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO"}' git remote add origin git@github.com:USER/REPO.git git push origin master

Pendekatan yang lebih mudah adalah:

  1. buat skrip shell di direktori dengan nama / home / USER_NAME / Desktop / my_scripts githubscript.sh
  2. Ubah dan simpan kode berikut ke githubscript.shfile
#!bin/bash
curl -u 'YOUR_GITHUB_USER_NAME' https://api.github.com/user/repos -d "{\"name\":\"$1\"}";
git init;
git remote add origin git@github.com:YOUR_GITHUB_USER_NAME/$1.git;

NB Berikut $1adalah repository nameyang dilewatkan sebagai argumentsaat menjalankanscript Ganti YOUR_GITHUB_USER_NAMEsebelum menyimpan script.

  1. Tetapkan izin yang diperlukan untuk scriptfile tersebut chmod 755 githubscript.sh

  2. Sertakan direktori skrip dalam file konfigurasi lingkungan. nano ~/.profile; export PATH="$PATH:$HOME/Desktop/my_scripts"

  3. Juga atur alias untuk menjalankan file githubscript.sh. nano ~/.bashrc; alias githubrepo="bash githubscript.sh"

  4. Sekarang memuat ulang .bashrcdan .profilefile di terminal. source ~/.bashrc ~/.profile;

  5. Sekarang untuk membuat repositori baru yaitu demo: githubrepo demo;


1
Dalam kode Anda, saya mengubah bagian ini: git remote add origin git@github.com:YOUR_GITHUB_USER_NAME/$1.git; menjadi git remote add origin https://github.com/YOUR_GITHUB_USER_NAME/$1.git; Untuk pengguna, yang tidak menggunakan kunci SSH.
Damiii

5

Berdasarkan jawaban lain oleh @Mechanical Snail, kecuali tanpa menggunakan python, yang saya temukan sangat berlebihan. Tambahkan ini ke Anda ~/.gitconfig:

[github]
    user = "your-name-here"
[alias]
    hub-new-repo = "!REPO=$(basename $PWD) GHUSER=$(git config --get github.user); curl -u $GHUSER https://api.github.com/user/repos -d {\\\"name\\\":\\\"$REPO\\\"} --fail; git remote add origin git@github.com:$GHUSER/$REPO.git; git push origin master"

Saya suka alias ini. Terima kasih lagi, @Robru. NB jika ini tidak berhasil, atau berhenti bekerja setelah OS baru diinstal .. pastikan Anda telah menginstal ikal!
daveloyall

5

Tidak, Anda harus membuka browser minimal sekali untuk membuat Anda usernamedi GitHub, setelah dibuat, Anda dapat memanfaatkan API GitHub untuk membuat repositori dari baris perintah, mengikuti perintah di bawah ini:

curl -u 'github-username' https://api.github.com/user/repos -d '{"name":"repo-name"}'

Sebagai contoh:

curl -u 'arpitaggarwal' https://api.github.com/user/repos -d '{"name":"command-line-repo"}'

1
Kemudian git remote add origin https://github.com/github-username/repo-name.gituntuk menautkan proyek lokal Anda ke github. Sebagai contoh, perintahnya akan terlihat seperti ini:git remote add origin https://github.com/arpitaggarwal/command-line-repo.git
SherylHohman

4

Untuk pengguna dengan otentikasi dua faktor, Anda dapat menggunakan solusi bennedich, tetapi Anda hanya perlu menambahkan header X-Github-OTP untuk perintah pertama. Ganti CODE dengan kode yang Anda dapatkan dari penyedia otentikasi dua faktor. Ganti USER dan REPO dengan nama pengguna dan nama repositori, seperti yang Anda lakukan dalam solusinya.

curl -u 'USER' -H "X-GitHub-OTP: CODE" -d '{"name":"REPO"}' https://api.github.com/user/repos
git remote add origin git@github.com:USER/REPO.git
git push origin master

3

Saya menulis skrip bagus untuk Gitter yang disebut ini menggunakan API REST untuk GitHub dan BitBucket:

https://github.com/dderiso/gitter

BitBucket:

gitter -c -r b -l javascript -n node_app

GitHub:

gitter -c -r g -l javascript -n node_app
  • -c = buat repo baru
  • -r = penyedia repo (g = GitHub, b = BitBucket)
  • -n = beri nama repo
  • -l = (opsional) atur bahasa aplikasi dalam repo

3

Saya telah membuat alias Git untuk melakukan ini, berdasarkan jawaban Bennedich . Tambahkan yang berikut ke Anda ~/.gitconfig:

[github]
    user = "your_github_username"
[alias]
    ; Creates a new Github repo under the account specified by github.user.
    ; The remote repo name is taken from the local repo's directory name.
    ; Note: Referring to the current directory works because Git executes "!" shell commands in the repo root directory.
    hub-new-repo = "!python3 -c 'from subprocess import *; import os; from os.path import *; user = check_output([\"git\", \"config\", \"--get\", \"github.user\"]).decode(\"utf8\").strip(); repo = splitext(basename(os.getcwd()))[0]; check_call([\"curl\", \"-u\", user, \"https://api.github.com/user/repos\", \"-d\", \"{{\\\"name\\\": \\\"{0}\\\"}}\".format(repo), \"--fail\"]); check_call([\"git\", \"remote\", \"add\", \"origin\", \"git@github.com:{0}/{1}.git\".format(user, repo)]); check_call([\"git\", \"push\", \"origin\", \"master\"])'"

Untuk menggunakannya, jalankan

$ git hub-new-repo

dari mana saja di dalam repositori lokal, dan masukkan kata sandi Github Anda saat diminta.


Ini tidak berhasil untuk saya. Ia mengembalikan 'Tidak ada file atau direktori'
adamwong246

Ini juga tidak berhasil untuk saya. Ia kembalicurl: (22) The requested URL returned error: 401 Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib64/python3.2/subprocess.py", line 488, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['curl', '-u', 'myusername', 'https://api.github.com/user/repos', '-d', '{"name": "reponame"}', '--fail']' returned non-zero exit status 22
Da Frenk

1
Penggunaan python sedikit banyak dan menambahkan banyak suara dalam bentuk backslash ekstra dan tanda baca lainnya. Saya membuat versi hanya dengan bash: stackoverflow.com/a/28924077/1423157
robru

3

Yang Anda butuhkan adalah hub . Hub adalah pembungkus baris perintah untuk git. Telah dibuat untuk berintegrasi dengan git asli menggunakan alias. Ia mencoba memberikan aksi github ke dalam git termasuk membuat repositori baru.

→  create a repo for a new project
$ git init
$ git add . && git commit -m "It begins."
$ git create -d "My new thing"
→  (creates a new project on GitHub with the name of current directory)
$ git push origin master

3

Untuk Rubyists:

gem install githubrepo
githubrepo create *reponame*

masukkan nama pengguna dan pw seperti yang diminta

git remote add origin *ctrl v*
git push origin master

Sumber: Elikem Adadevoh


3

Untuk semua pengguna Python 2.7. *. Ada pembungkus Python di sekitar API Github yang saat ini ada di Versi 3, yang disebut GitPython . Cukup instal menggunakan easy_install PyGithubatau pip install PyGithub.

from github import Github
g = Github(your-email-addr, your-passwd)
repo = g.get_user().user.create_repo("your-new-repos-name")

# Make use of Repository object (repo)

The Repositorydocs objek yang di sini .


2

Untuk petunjuk tentang cara membuat token, buka di sini Ini adalah perintah yang akan Anda ketikkan (pada tanggal jawaban ini. (Ganti semua kata kunci CAPS):

curl -u 'YOUR_USERNAME' -d '{"scopes":["repo"],"note":"YOUR_NOTE"}' https://api.github.com/authorizations

Setelah Anda memasukkan kata sandi Anda, Anda akan melihat yang berikut yang berisi token Anda.

{
  "app": {
    "name": "YOUR_NOTE (API)",
    "url": "http://developer.github.com/v3/oauth/#oauth-authorizations-api"
  },
  "note_url": null,
  "note": "YOUR_NOTE",
  "scopes": [
    "repo"
  ],
  "created_at": "2012-10-04T14:17:20Z",
  "token": "xxxxx",
  "updated_at": "2012-10-04T14:17:20Z",
  "id": xxxxx,
  "url": "https://api.github.com/authorizations/697577"
}

Anda dapat mencabut token Anda kapan saja dengan pergi ke sini


2

Untuk alasan rep, saya tidak dapat menambahkan ini sebagai komentar (di mana lebih baik pergi dengan jawaban bennedich ), tetapi untuk baris perintah Windows, berikut adalah sintaks yang benar:

curl -u YOUR_USERNAME https://api.github.com/user/repos -d "{\" name \ ": \" YOUR_REPO_NAME \ "}"

Ini bentuk dasar yang sama, tetapi Anda harus menggunakan tanda kutip ganda (") alih-alih tunggal, dan keluar dari tanda kutip ganda yang dikirim dalam parameter POST (setelah flag -d) dengan garis miring terbalik. Saya juga menghapus tanda kutip tunggal di sekitar nama pengguna saya, tetapi jika nama pengguna Anda memiliki spasi (mungkin?) mungkin perlu tanda kutip ganda.


Bagus untuk diketahui bagi pengguna Windows. Tidak, nama pengguna tidak boleh mengandung spasi (Formulir pendaftaran di github.com menyatakan: "Nama pengguna hanya boleh berisi karakter alfanumerik atau tanda hubung tunggal, dan tidak dapat memulai atau mengakhiri dengan tanda hubung"). Dengan demikian, tidak perlu mengutip dua kali dari nama pengguna.
mklement0

Github power shell tidak menerima -u dengan curl, pada Windows :(
JuliandotNut

2

Disclamier: Saya penulis proyek open source

Fungsionalitas ini didukung oleh: https://github.com/chrissound/Human-Friendly-Commands dasarnya adalah skrip ini:

#!/usr/bin/env bash

# Create a repo named by the current directory
# Accepts 1 STRING parameter for the repo description
# Depends on bin: jq
# Depends on env: GITHUB_USER, GITHUB_API_TOKEN
github_createRepo() {
  projName="$(basename "$PWD")"
  json=$(jq -n \
    --arg name "$projName" \
    --arg description "$1" \
    '{"name":$name, "description":$description}')

  curl -u "$GITHUB_USER":"$GITHUB_API_TOKEN" https://api.github.com/user/repos -d "$json"
  git init
  git remote add origin git@github.com:"$GITHUB_USER"/"$projName".git
  git push origin master
};

Ini memang cara baru untuk menggunakan GitHub Personal Access Token. (Cara lama menambahkannya melalui ?access_token=${ACCESSTOKEN}tidak lagi berfungsi.
not2qubit

0

Menemukan solusi ini yang saya sukai: https://medium.com/@jakehasler/how-to-create-a-remote-git-repo-from-the-command-line-2d6857f49564

Pertama-tama Anda harus membuat Token Akses Pribadi Github

Buka ~ / .bash_profile atau ~ / .bashrc di editor teks favorit Anda. Tambahkan baris berikut di dekat bagian atas file Anda, di mana sisa variabel yang diekspor adalah:

export GITHUB_API_TOKEN=<your-token-here>

Di suatu tempat di bawah, dengan fungsi bash Anda yang lain, Anda dapat menempelkan sesuatu yang mirip dengan yang berikut:

function new-git() {
    curl -X POST https://api.github.com/user/repos -u <your-username>:$GITHUB_API_TOKEN -d '{"name":"'$1'"}'
}

Sekarang, setiap kali Anda membuat proyek baru, Anda dapat menjalankan perintah $ new-git awesome-repountuk membuat repositori jarak jauh publik baru di akun pengguna Github Anda.



-2

inilah perintah git awal saya (mungkin, aksi ini terjadi C:/Documents and Settings/your_username/):

mkdir ~/Hello-World
# Creates a directory for your project called "Hello-World" in your user directory
cd ~/Hello-World
# Changes the current working directory to your newly created directory
touch blabla.html
# create a file, named blabla.html
git init
# Sets up the necessary Git files
git add blabla.html
# Stages your blabla.html file, adding it to the list of files to be committed
git commit -m 'first committttt'
# Commits your files, adding the message 
git remote add origin https://github.com/username/Hello-World.git
# Creates a remote named "origin" pointing at your GitHub repository
git push -u origin master
# Sends your commits in the "master" branch to GitHub

1
Repo Hello-World harus tersedia di GitHub dalam hal ini, tidak mengatasi masalah dalam pertanyaan.
JuliandotNut

-2

Saya baru-baru tahu tentang create-github-repo . Dari readme:

Install:

$ npm i -g create-github-repo

Pemakaian:

$ export CREATE_GITHUB_REPO_TOKEN=<access_token>
$ create-github-repo --name "My coolest repo yet!"

Atau:

$ create-github-repo <access_token> --name "My coolest repo yet!"

-7

buat repositori baru di baris perintah

echo "# <RepositoryName>" >> README.md

git init

git add README.md

git commit -m "first commit"

git remote add origin https://github.com/**<gituserID>/<RepositoryName>**.git

git push -u origin master

dorong repositori yang ada dari baris perintah

git remote add origin https://github.com/**<gituserID>/<RepositoryName>**.git

git push -u origin master

1
Ini tidak bekerja; itu tidak membuat repositori jarak jauh .
Matius Baca
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.