Gabay

git clone: paano i-clone ang repository mula sa GitHub at iba pa

Na-update: · Skillaria.Top

Dinadownload ng git clone ang buong remote repository, kasama ang lahat ng file, buong history ng commit, at branch, at gumagawa ng lokal na kopya na may nakatakdang remote na origin. Pangunahing gamit: git clone address-ng-repository. Pinapayagan ng mga flag na pumili ng folder o branch, o magdownload lang ng pinakabagong commit gamit ang --depth 1.

Gumagawa ang git clone ng kumpletong lokal na kopya ng remote repository: mga file, buong history ng commit, branch, at tag. Ito ang karaniwang paraan para magsimula sa project na nasa GitHub, GitLab, o corporate server. Hindi tulad ng pag-download ng ZIP archive, ang clone ay buong repository, kung saan puwede kayong mag-commit at mag-push ng pagbabago pabalik.

Pangunahing gamit ng git clone

Kopyahin ang address ng repository (sa GitHub, ang berdeng button na "Code") at patakbuhin:

git clone https://github.com/username/project.git
Cloning into 'project'...
remote: Enumerating objects: 1532, done.
remote: Counting objects: 100% (1532/1532), done.
remote: Compressing objects: 100% (812/812), done.
Receiving objects: 100% (1532/1532), 2.41 MiB | 6.10 MiB/s, done.
Resolving deltas: 100% (701/701), done.

Gagawa ang Git ng folder na project sa kasalukuyang directory (ang pangalan ay kinukuha sa address nang walang .git). Pagkatapos, pumasok sa folder:

cd project
git status

Ano ang ginagawa ng git clone sa ilalim

Hindi lang basta pag-download ng file ang clone. Ang pag-unawa sa mga hakbang na ito ay nagpapaliwanag kung bakit "gumagana lang" ang lahat pagkatapos ng clone, at saan galing ang mga branch na may prefix na origin/. Ganito ang hakbang-hakbang ng command:

  1. Gumagawa ng folder at nagpapatakbo sa loob nito ng katumbas ng git init.
  2. Nagdaragdag ng remote na may pangalang origin, na tumuturo sa orihinal na address.
  3. Dinadownload ang lahat ng object at reference, katumbas ng git fetch.
  4. Gumagawa ng remote branch na origin/main, origin/develop, at iba pa.
  5. Gumagawa ng lokal na default branch (karaniwan main), ikinakabit ito sa origin/main, at inilalabas ang mga file.

Kaya pagkatapos ng clone, hindi na kailangang manu-manong i-set ang git remote. Agad na gumagana ang git push at git pull.

git remote -v
origin  https://github.com/username/project.git (fetch)
origin  https://github.com/username/project.git (push)

Pag-clone gamit ang HTTPS at SSH

HTTPSSSH
Addresshttps://github.com/user/repo.gitgit@github.com:user/repo.git
Pampublikong repositoryNakakapag-clone nang walang loginKailangan ng SSH key na naka-link sa account
Pribadong repository, pushKailangan ng Personal Access Token sa halip na passwordGumagana gamit ang key, walang password na tina-type
Corporate networkHalos laging bukas ang port 443Minsan sarado ang port 22

Para magbasa ng bukas na project ng iba, sapat na ang HTTPS. Para sa sarili ninyong repository na madalas ninyong i-push, mas maginhawa ang SSH:

git clone git@github.com:username/project.git

Kung na-clone na ninyo gamit ang HTTPS at gusto ninyong lumipat sa SSH, hindi na kailangang i-download ulit:

git remote set-url origin git@github.com:username/project.git

Pag-clone sa tiyak na folder

Ang pangalawang argumento ay pangalan o path ng target na directory:

# Sa folder na may ibang pangalan
git clone https://github.com/username/project.git my-copy

# Sa kasalukuyang folder (dapat walang laman)
git clone https://github.com/username/project.git .

Kung umiiral at may laman ang target na folder, tatanggi ang Git: fatal: destination path 'project' already exists and is not an empty directory.

Pag-clone ng tiyak na branch

Bilang default, pagkatapos ng clone, nasa default branch ng remote repository kayo. Para agad na mapunta sa ibang branch, gamitin ang -b (--branch):

git clone -b develop https://github.com/username/project.git

Pansinin: dinadownload pa rin ang lahat ng branch, at nasa develop lang kayo. Kung kailangan lang ang isang branch nang wala ang iba, idagdag ang --single-branch:

git clone -b develop --single-branch https://github.com/username/project.git

Tumatanggap din ang -b ng pangalan ng tag. Sa ganitong paraan, makukuha ninyo ang estado ng project sa oras ng release (sa detached HEAD mode):

git clone -b v2.1.0 --depth 1 https://github.com/username/project.git

Nasaan ang iba pang branch pagkatapos ng clone

Nagugulat ang mga baguhan: git branch ay nagpapakita lang ng main. Ang iba pang branch ay na-download bilang remote, at makikita ito sa ganitong paraan:

git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/develop
  remotes/origin/feature/login

Para magsimulang magtrabaho sa isa sa mga ito, sapat na ang paglipat gamit ang maikling pangalan. Gagawa ang Git ng lokal na branch na nakasubaybay sa remote:

git switch develop

Shallow clone: --depth para sa malalaking repository

Maaaring umabot ng gigabytes ang history ng mga lumang project. Kung kailangan lang ninyo ang kasalukuyang code, halimbawa sa CI o para lang i-build ang project, i-download ang pinakabagong commit:

git clone --depth 1 https://github.com/username/big-project.git

Ang flag na --depth ay may kasamang --single-branch, kaya ang default branch at isang commit lang ang papasok. Kung kalaunan ay kailangan ninyo ang buong history, puwede itong i-download pa:

git fetch --unshallow

Puwede ring magtakda ng ibang lalim, halimbawa --depth 50, o limitahan ang history ayon sa petsa gamit ang --shallow-since=2025-01-01. Hindi maganda ang shallow clone para sa aktibong development: hindi kumpleto ang git log, git blame, at paghahanap sa history.

Partial clone: --filter

Alternatibo para sa napakalalaking monorepo: i-download ang history ng commit, pero ang laman ng file ay kukunin kapag kailangan:

git clone --filter=blob:none https://github.com/username/monorepo.git

Sa ganitong paraan, buo ang history para sa log at paglipat ng branch, pero natitipid ang bandwidth at espasyo. Kailangan ito ng suporta ng server; sinusuportahan ito ng GitHub at GitLab.

Mirror clone at paglilipat ng repository

Ang karaniwang clone ay kinukuha ang mga branch bilang remote at hindi kinokopya ang mga server-side reference. Para ilipat ang project sa ibang hosting o gumawa ng buong backup na eksaktong kopya, ginagamit ang --mirror:

git clone --mirror https://github.com/username/project.git
cd project.git
git push --mirror git@gitlab.com:username/project.git

Ang mirror ay bare repository na walang working files, at lahat ng branch at tag nito ay nakaimbak bilang lokal. Ipapadala ng git push --mirror ang lahat ng ito sa bagong server, at mailipat ang history nang buo. Tandaan na ang mga issue, pull request, at setting ng hosting ay hindi naiilipat sa ganitong paraan, dahil data ito ng serbisyo at hindi ng Git.

Ang katulad na flag na --bare ay gumagawa rin ng repository na walang working directory, pero kinokopya lang nito ang mga branch at tag. Angkop ito para mag-set up ng central repository sa sarili ninyong server mula sa umiiral na project.

Pag-clone kasama ang submodule

Kung gumagamit ang project ng git submodules, walang laman ang kanilang mga folder bilang default. Para ma-download lahat nang sabay:

git clone --recurse-submodules https://github.com/username/project.git

Kung na-clone na nang walang flag, i-download ang submodule pagkatapos:

git submodule update --init --recursive

git clone, fork, at pag-download ng ZIP

ParaanAno ang makukuhaKailan gamitin
git cloneBuong repository na may history at remotePagtatrabaho sa project kung saan may karapatan kayo o kailangan ang history
Fork sa GitHubKopya ng repository sa inyong account sa serverMag-ambag sa project ng iba sa pamamagitan ng pull request
Download ZIPMga file lang, walang .gitMabilis na pagtingin sa code, walang balak mag-commit

Hindi nagkakalaban ang fork at clone: sa open source, una ninyong gagawin ang fork sa website, tapos i-clone ang sarili ninyong fork at idagdag ang orihinal bilang pangalawang remote:

git clone git@github.com:me/project.git
cd project
git remote add upstream https://github.com/author/project.git
git fetch upstream

Mga karaniwang error sa git clone

"Repository not found"

Maaaring typo sa address, o pribado ang repository at wala kayong access. Sinasadya ng GitHub na sabihing "not found" sa pribadong repository, sa halip na "access denied". Tingnan ang address at siguraduhing naka-login kayo sa tamang account.

"Permission denied (publickey)"

Naka-SSH ang clone, pero hindi naka-set ang key. Tingnan gamit ang ssh -T git@github.com, idagdag ang public key sa settings ng account, o pansamantalang mag-clone gamit ang HTTPS.

"Authentication failed" sa HTTPS

Ang password ng account ang inilagay ninyo. Matagal nang hinihingi ng GitHub ang Personal Access Token sa halip na password para sa mga operasyon ng Git sa HTTPS. Kung nakalagay pa ang maling credential sa Git, burahin ito sa credential manager ng system.

Naputol ang malaking repository

Ang mga error gaya ng early EOF o RPC failed ay kadalasang dahil sa hindi matatag na network at laki ng repository. Nakakatulong ang shallow clone na --depth 1 na sinusundan ng git fetch --unshallow, o ang clone gamit ang SSH.

Mga problema sa line ending sa Windows

Pagkatapos ng clone, lahat ng file ay mukhang "nabago": ito ang epekto ng conversion ng CRLF/LF. I-set ang git config --global core.autocrlf true sa Windows (o input sa Linux at macOS), at mas mainam na itakda ang mga patakaran sa .gitattributes ng project.

Ano ang gagawin pagkatapos ng clone

Handa na ang clone, pero bago baguhin ang code, maglaan ng ilang minuto para sa paghahanda. Makakatipid ito sa karaniwang problema sa unang araw ng pagtatrabaho sa project ng iba.

  1. Basahin ang README at CONTRIBUTING. Karaniwang nakasulat dito kung paano mag-install ng dependencies, magpatakbo ng test, at kung paano pinapangalanan ang mga branch sa project.
  2. Tingnan ang branch at estado. Ipapakita ng git status at git log --oneline -5 kung nasaan kayo at ano ang mga huling pagbabago.
  3. Gumawa ng sariling branch. Huwag magtrabaho nang diretso sa main: git switch -c feature/my-task.
  4. Suriin ang author ng commit. Kung may maraming account sa computer (personal at trabaho), mag-set ng email para sa partikular na repository nang walang --global: git config user.email "you@company.com".
  5. I-install ang dependencies. Hindi inilalagay sa repository ang mga folder gaya ng node_modules o venv; nililikha ang mga ito nang lokal: npm install, pip install -r requirements.txt, at iba pa.

Paano panatilihing bago ang clone

Isang beses lang ginagawa ang clone. Pagkatapos, kinukuha ang mga bagong commit ng katrabaho mula sa parehong origin:

# Tingnan kung ano ang dumating sa server, nang walang binabago
git fetch
git log --oneline main..origin/main

# Pagsamahin ang mga pagbabago sa kasalukuyang branch
git pull

Nakakaiwas sa hindi inaasahang conflict ang ugaling mag-git fetch muna at tingnan kung ano ang dumating. Huwag mag-clone ulit para lang "i-update" ang project, dahil mawawala ang mga lokal na branch at ang hindi pa naka-commit na trabaho.

Cheat sheet ng git clone

GawainCommand
Karaniwang clonegit clone <url>
Sa sariling foldergit clone <url> <folder>
Diretso sa tiyak na branchgit clone -b <branch> <url>
Isang branch langgit clone -b <branch> --single-branch <url>
Walang historygit clone --depth 1 <url>
Walang laman ang lumang filegit clone --filter=blob:none <url>
Kasama ang submodulegit clone --recurse-submodules <url>
Bare copy para sa servergit clone --bare <url>

Buod

Dinadownload ng git clone ang buong repository at agad na sine-set ang koneksyon sa server sa pamamagitan ng origin, kaya puwede na kayong mag-commit, mag-push, at mag-pull pagkatapos nito nang walang dagdag na setup. Para sa sarili ninyong project, gamitin ang SSH; para sa malalaking repository, ang --depth o --filter; at para sa tiyak na branch, ang -b. Ang pakikitungo sa remote repository, push, pull, at fetch ay itinuturo nang praktikal sa kursong Git namin.

Mga madalas itanong

Ano ang pagkakaiba ng git clone at git pull?

Isang beses ginagawa ang git clone at gumagawa ng bagong lokal na kopya ng repository. Ang git pull ay ginagawa sa umiiral nang clone para kunin ang mga bagong pagbabago mula sa server.

Puwede bang i-clone ang isang folder lang ng repository?

Hindi diretso. Pinakamalapit ang partial clone gamit ang --filter=blob:none --sparse, tapos git sparse-checkout set path, para lumabas sa working directory ang kailangang folder lang.

Gaano kalaki ang espasyo ng clone?

Humigit-kumulang katumbas ng buong history na naka-compress, dagdag ang mga na-extract na file ng kasalukuyang bersyon. Makikita ang laki ng repository gamit ang git count-objects -vH.

Puwede bang i-clone ang lokal na repository?

Oo, ilagay ang path sa halip na address: git clone /path/to/repo copy. Kapaki-pakinabang ito para sa eksperimento nang hindi nanganganib ang pangunahing kopya.

Kailangan ba ng git init bago ang git clone?

Hindi. Gumagawa na ng folder at nag-iinitialize ng repository ang git clone mismo.

Pag-aralan ito sa video

Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Git с нуля до уверенного разработчика”.

Pumunta sa kurso