Ачааллж байна...
Өмнөх хичээлд бид дээш чиглэсэн сумыг ажиллуулж, зарлагын бүртгэлээ GitHub руу push хийсэн. Одоо таны цомог хоёр газар байна: таны компьютер дээр болон GitHub дээр. Энэ хичээлд бид эсрэг чиглэлийн сумыг, GitHub-аас компьютер рүү доош чиглэсэн сумыг сурна. Үүнд хоёр command бий. git clone нь GitHub дээрх repository-гоос цоо шинэ, бүрэн хуулбар авдаг бөгөөд нэг удаа хэрэглэгддэг. git pull нь аль хэдийн байгаа local repository-д GitHub дээрх шинэ commit-уудыг татаж оруулдаг бөгөөд байнга хэрэглэгддэг.
Энэ хоёр command-ыг жинхэнэ байдлаар турших хамгийн сайн арга бол нэг төслийг хоёр газар байлгах явдал. Тиймээс бид зарлагын бүртгэлээ өөр фолдер руу clone хийж, тэр хуулбараас өөрчлөлт push хийгээд, анхны фолдертоо pull хийж тэр өөрчлөлтийг авна. Энэ үйл явцын дунд өмнөх хичээлд дурдсан origin/main-ийн нууцыг нүдээр харж, git fetch гэдэг гурав дахь command-тай танилцана. Хичээлийн төгсгөлд хоёр сумны зураглал тань бүрэн болно.
Номын сангаас ном зээлж авахыг төсөөлөөрэй. Анх удаа очиход та бүтэн номыг гартаа авч, гэртээ авчирдаг. Энэ бол clone: GitHub дээрх бүтэн цомгийг бүх түүхтэй нь анх удаа өөрийн компьютерт авчрах. Харин тэр ном цуврал бөгөөд зохиогч нь шинэ бүлгүүд байнга нэмдэг гэж бодъё. Шинэ бүлэг гарах бүрт та бүх номыг дахин зээлэхгүй, зөвхөн шинэ бүлгүүдийг аваад гэрийнхээ номонд нэмнэ. Энэ бол pull: аль хэдийн байгаа цомогтоо зөвхөн шинэ зургуудыг нэмэх.
Энэ зүйрлэлд нэг чухал санаа бий: номын сан таны гэрийн номыг автоматаар шинэчилдэггүй. Шинэ бүлэг гарсан эсэхийг мэдэхийн тулд та өөрөө номын санд очиж, асуух хэрэгтэй. Git-д ч гэсэн ийм: GitHub дээр шинэ commit гарсан ч таны компьютер тэр тухай өөрөө мэдэхгүй. Энэ баримтын үр дагаврыг хичээлийн дунд хэсэгт өөрийн нүдээр харна.
Алхам 1: Хаана clone хийхээ сонгох
Clone нь шинэ фолдер үүсгэж, түүн дотор repository-г бүрэн хуулдаг. Тиймээс эхлээд тэр шинэ фолдер хаана үүсэхийг шийднэ. Хамгийн чухал дүрэм: ямар нэг repository-ийн дотор clone хийж болохгүй. Энэ нь 3.4 дүгээр хичээлд үзсэн “repository дотор repository” асуудлыг үүсгэнэ. Тиймээс хэрэглэгчийн фолдертоо очно.
VS Code-ийн terminal-д бичнэ үү.
Command:
cd ~
pwdГаралт:
Path
----
C:\Users\BatТа одоо хэрэглэгчийн фолдертоо, ямар ч repository-оос гадуур байна.
Алхам 2: Хаягаа авах
Browser дээр GitHub-ийн expense-tracker repository хуудсаа нээнэ үү. Файлуудын жагсаалтын дээд хэсэгт ногоон “Code” товч бий, түүнийг дарна уу. Нээгдсэн цонхны HTTPS таб дээр repository-ийн хаяг байна, өмнөх хичээлд git remote add-д ашигласан хаягтай яг ижил. Хаягийн хажуудах хуулах icon-ийг дарж хуулна уу.
[Зураг: ногоон Code товч, HTTPS таб, хуулах icon]
Алхам 3: Clone хийх
Command:
git clone https://github.com/bat-dorj/expense-tracker.git expense-tracker-copyCommand-ыг задалъя. “git clone” нь хуулбар авах, хаяг нь хаанаас, сүүлийн “expense-tracker-copy” нь шинэ фолдерын нэр. Хэрвээ сүүлийн хэсгийг бичихгүй бол Git repository-ийн нэрээр, өөрөөр хэлбэл expense-tracker гэж фолдер үүсгэх байсан. Гэхдээ танд аль хэдийн тийм нэртэй фолдер байгаа тул бид өөр нэр өгсөн.
Гаралт:
Cloning into 'expense-tracker-copy'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 14 (delta 3), reused 14 (delta 3), pack-reused 0 (from 0)
Receiving objects: 100% (14/14), done.
Resolving deltas: 100% (3/3), done.Эхний мөр “Cloning into ‘expense-tracker-copy’...” нь “expense-tracker-copy руу хуулж байна” гэсэн утгатай. Дараагийн дөрвөн мөр “remote:”-ээр эхэлсэн бөгөөд энэ нь GitHub-ийн талд болж буй ажлын тайлан: GitHub таны цомгийг тоолж, шахаж, илгээхэд бэлтгэсэн. Энэ нь өмнөх хичээлийн push-ийн гаралттай төстэй боловч эсрэг чиглэлд: тэр үед таны компьютер бэлтгэж байсан бол одоо GitHub бэлтгэж байна. Сүүлийн хоёр мөр таны компьютерийн талын ажил: “Receiving objects” нь "объектуудыг хүлээн авч байна", “Resolving deltas” нь хүлээн авсан шахсан өгөгдлийг задалж байгааг заана. Бүх мөр “done”-оор төгссөн тул clone амжилттай. Таны repository private байсан ч нэвтрэх цонх гарсангүй, учир нь Git Credential Manager өмнөх хичээлд хадгалсан түлхүүрийг ашигласан.
Алхам 4: Хуулбарыг судлах
Command:
cd expense-tracker-copy
git log --onelineГаралт:
1d3e5a7 (HEAD -> main, origin/main, origin/HEAD) Add log files to ignore list
9f2b6e0 Format amounts with thousands separator
a4c81f2 Initial commitЭнэ гаралтын хамгийн чухал зүйл: бүх гурван commit, бүрэн түүх нь хуулбарт ирсэн байна. Clone зөвхөн одоогийн файлуудыг бус, бүх цомгийг авчирдаг. Хашилтанд гурван хавчуурга харагдаж байна. HEAD -> main нь таны одоогийн салаа. origin/main нь өмнөх хичээлээс таньж байгаа “GitHub дээрх main-ийн тухай сүүлийн мэдээ”. origin/HEAD нь шинэ зүйл бөгөөд энэ нь “GitHub дээрх repository-ийн анхдагч салаа аль нь вэ” гэдгийг заадаг. Энэ нь танд бараг хэзээ ч хэрэггүй тул тоохгүй байж болно.
Таны сүүлийн commit message өмнөх хичээлийнхээс бага зэрэг өөр харагдаж болох нь хэвийн, хамгийн гол нь өмнөх хичээлд push хийсэн commit-ууд тань энд байгаа явдал.
Command:
git remote -v
git statusГаралт:
origin https://github.com/bat-dorj/expense-tracker.git (fetch)
origin https://github.com/bat-dorj/expense-tracker.git (push)
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree cleanClone бүх зүйлийг автоматаар тохируулсныг анзаараарай. origin remote аль хэдийн бүртгэгдсэн, main салаа origin/main-тай холбогдсон. Өмнөх хичээлд git remote add болон -u-ээр гараар хийсэн бүх зүйл энд нэг command-аар хийгдсэн. Энэ нь clone бол GitHub-аас эхэлж буй төсөлд ажиллах хамгийн энгийн арга гэдгийг харуулж байна.
Алхам 5: Хуулбарт юу ирээгүй вэ
Одоо хуулбарыг VS Code-ийн шинэ цонхонд нээе.
Command:
code .Шинэ VS Code цонх нээгдэнэ. Explorer хэсгийг хараарай: .gitignore, main.py, report.py, storage.py, formatting.py, магадгүй data фолдер. Харин venv фолдер, pycache байхгүй. Энэ нь гайхах зүйл биш: тэдгээр нь хэзээ ч commit хийгдээгүй тул GitHub дээр байхгүй, тиймээс clone тэдгээрийг авчирч чадахгүй.
Энэ баримт маш чухал практик сургамж өгдөг. Clone нь зөвхөн repository-д байгаа зүйлийг авчирдаг. Хэрвээ таны программ гадны package ашигладаг бол хуулбарт шинэ venv үүсгэж, requirements.txt-ээс package-уудыг суулгах хэрэгтэй. Хэрвээ та data файлаа .gitignore-д нэмсэн бол тэр файл ч хуулбарт байхгүй. Шинэ VS Code цонхны terminal-д программыг ажиллуулж шалгая.
Command:
python main.pyХэрвээ data файл тань repository-д байгаа бол гаралт:
Нийт зарлага: 20,500₮Хэрвээ data файлаа .gitignore-д нэмсэн бол гаралт:
Traceback (most recent call last):
File "C:\Users\Bat\expense-tracker-copy\main.py", line 5, in <module>
expenses = load_expenses("data/expenses.json")
File "C:\Users\Bat\expense-tracker-copy\storage.py", line 4, in load_expenses
with open(path, encoding="utf-8") as f:
~~~~^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'data/expenses.json'Хэрвээ алдаа гарсан бол энэ traceback-ийг доороос нь дээш уншъя. Хамгийн доод мөр “FileNotFoundError: No such file or directory: ‘data/expenses.json’” нь "ийм файл эсвэл фолдер байхгүй" гэсэн утгатай. Дээш нь storage.py-ийн 4 дүгээр мөрөнд open() тэр файлыг нээх гэж оролдсон, түүнээс дээш main.py-ийн 5 дугаар мөр load_expenses()-ийг дуудсан. Шалтгаан нь тодорхой: файл .gitignore-д байсан тул GitHub руу хэзээ ч очоогүй. Энэ хичээлийн үлдсэн хэсгийг дагахын тулд хуулбарын фолдерт data фолдер үүсгэж, анхны төслийнхөө expenses.json-ийг File Explorer-оор хуулж тавина уу, эсвэл 3.4 дүгээр хичээлийн жишээ өгөгдлөөр шинэ файл үүсгэнэ үү. Энэ файл .gitignore-д байгаа тул хуулбарын repository-д ч нөлөөлөхгүй.
Энэ туршлага 2.4 дүгээр хичээлийн .env.example-ийн санааг шинэ өнцгөөс харуулж байна. Таны repository-г clone хийсэн хүн юу дутуу байгааг, юуг өөрөө бэлдэх ёстойг мэдэх ёстой. Үүнийг README файлд бичдэг бөгөөд бид Бүлэг 5-д сайн README бичиж сурна.
Алхам 6: Хуулбараас өөрчлөлт push хийх
Одоо хоёр фолдероо хоёр өөр компьютер гэж төсөөлөөрэй: анхны expense-tracker бол таны гэрийн компьютер, expense-tracker-copy бол ажлын компьютер. Ажлын компьютер дээр өөрчлөлт хийж GitHub руу илгээе. Хуулбарын VS Code цонхонд report.py-г нээж, төгсгөлд нь шинэ функц нэмж хадгална уу.
python
def count(expenses):
return len(expenses)Хуулбарын terminal-д бичнэ үү.
Command:
git add report.py
git commit -m "Add expense count function"
git pushГаралт:
[main 6e9c2b4] Add expense count function
1 file changed, 3 insertions(+)
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 330 bytes | 330.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/bat-dorj/expense-tracker.git
1d3e5a7..6e9c2b4 main -> mainClone upstream-ийг аль хэдийн тохируулсан тул зүгээр git push хангалттай байлаа. Сүүлийн мөр GitHub дээрх main 6e9c2b4 руу шинэчлэгдсэнийг харуулна. Одоо GitHub болон хуулбар нь шинэ функцтэй, харин анхны фолдер тэр тухай юу ч мэдэхгүй.
Алхам 7: Анхны фолдерт буцах: гайхалтай нээлт
Анхны expense-tracker фолдерын VS Code цонх руу шилжинэ үү, эсвэл terminal-д cd ~\expense-tracker гэж бичнэ үү. Тэгээд status асууя.
Command:
git statusГаралт:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean“up to date” гэж байна! Гэтэл бид GitHub дээр шинэ commit байгааг мэднэ. Git худлаа хэлж байна уу? Үгүй. Өмнөх хичээлд origin/main бол GitHub биш, таны компьютерийн санаж буй “GitHub-тай сүүлд ярилцахад тэнд main ийм байсан” гэсэн тэмдэглэл гэж ярьсныг санаарай. Энэ фолдер GitHub-тай сүүлд push хийхдээ ярилцсан бөгөөд тэр үед хоёулаа ижил байсан. Түүнээс хойш хуулбар GitHub-ийг шинэчилсэн ч энэ фолдер дахин асуугаагүй. Тиймээс түүний мэдэж байгаагаар бүх зүйл ижил хэвээр. git status хэзээ ч интернэтэд холбогддоггүй, зөвхөн таны компьютер дээрх тэмдэглэлүүдийг харьцуулдаг.
Энэ бол номын сангийн зүйрлэлийн яг тэр санаа: номын санд шинэ бүлэг гарсан ч та очиж асуух хүртэл мэдэхгүй.
Алхам 8: GitHub-аас асуух: git fetch
Номын санд очиж "шинэ юм гарсан уу?" гэж асуух command бол git fetch.
Command:
git fetchГаралт:
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0 (from 0)
Unpacking objects: 100% (3/3), 310 bytes | 31.00 KiB/s, done.
From https://github.com/bat-dorj/expense-tracker
1d3e5a7..6e9c2b4 main -> origin/main“remote:” мөрүүд болон “Unpacking objects” нь clone-ийн үеийнхтэй адил: GitHub шинэ commit-ыг бэлтгэж илгээсэн, таны компьютер хүлээн авч задалсан. Хамгийн чухал нь сүүлийн хоёр мөр. “From https://github.com/...” нь хаанаас авсныг заана. “1d3e5a7..6e9c2b4 main -> origin/main” нь “GitHub дээрх main-ийн мэдээг ашиглан таны origin/main тэмдэглэлийг 1d3e5a7-оос 6e9c2b4 руу шинэчиллээ” гэсэн утгатай. Сумны баруун талд origin/main байгааг анхааралтай хараарай, таны main биш. Fetch таны тэмдэглэлийг шинэчилсэн боловч таны ажлын файлуудад огт хүрээгүй. VS Code-д report.py-г харвал count функц хараахан алга.
Command:
git statusГаралт:
On branch main
Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working tree cleanОдоо status үнэнийг хэлж байна: “Your branch is behind ‘origin/main’ by 1 commit” буюу "Таны салаа origin/main-аас 1 commit-оор хоцорч байна". Энэ нь өмнөх хичээлийн “ahead”-ийн эсрэг үг. Үргэлжлэл “and can be fast-forwarded” нь “fast-forward хийж болно” гэсэн утгатай, 3.3 дугаар хичээлээс таньж байгаа нэр томьёо: таны main хөдлөөгүй тул зүгээр урагшлуулахад л хангалттай. Хаалтан дотор Git зөвлөж байна: “local салаагаа шинэчлэхийн тулд git pull ашигла”.
Алхам 9: Татаж оруулах: git pull
Command:
git pullГаралт:
Updating 1d3e5a7..6e9c2b4
Fast-forward
report.py | 3 +++
1 file changed, 3 insertions(+)Энэ гаралтыг та аль хэдийн мэднэ: энэ бол 3.3 дугаар хичээлийн fast-forward merge-ийн гаралттай яг ижил. Учир нь git pull бол үнэндээ хоёр command-ын нийлбэр: эхлээд git fetch, дараа нь git merge origin/main. Бид fetch-ийг аль хэдийн хийсэн тул pull зөвхөн merge хэсгийг хийлээ: origin/main-ийн шинэ commit-ыг таны main руу нэгтгэсэн. VS Code-д report.py-г харвал count функц гарч ирсэн байна. Хоёр компьютер, хоёр фолдер, нэг GitHub бүгд ижил боллоо.
Энэ бол энэ хичээлийн гол ойлголт тул дахин хэлье: fetch нь зөвхөн мэдээ авдаг, pull нь мэдээ аваад таны ажилд нэгтгэдэг. Fetch бол номын сангаас шинэ бүлгийн тухай мэдээ авах, pull бол шинэ бүлгийг авчирч номдоо хавчуулах.
Fetch-гүйгээр шууд pull хийх
Өдөр тутмын ажилд fetch-ийг тусад нь бараг хийдэггүй, шууд pull хийдэг. Үүнийг харцгаая. Хуулбарын VS Code цонх руу шилжиж, main.py-д count функцийг ашиглана уу. Import мөрийг өөрчилж, төгсгөлд шинэ мөр нэмнэ.
python
from storage import load_expenses
from report import total, count
from formatting import format_amount
expenses = load_expenses("data/expenses.json")
print("Нийт зарлага:", format_amount(total(expenses)))
print("Зарлагын тоо:", count(expenses))Хуулбарын terminal-д бичнэ үү.
Command:
python main.py
git add main.py
git commit -m "Show number of expenses"
git pushГаралт (зөвхөн эхний ба сүүлийн хэсэг):
Нийт зарлага: 20,500₮
Зарлагын тоо: 3
[main b2a7f1c] Show number of expenses
1 file changed, 2 insertions(+), 1 deletion(-)
...
To https://github.com/bat-dorj/expense-tracker.git
6e9c2b4..b2a7f1c main -> mainОдоо анхны фолдерт буцаж, fetch хийлгүйгээр шууд pull хийнэ.
Command:
git pullГаралт:
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0 (from 0)
Unpacking objects: 100% (3/3), 352 bytes | 35.00 KiB/s, done.
From https://github.com/bat-dorj/expense-tracker
6e9c2b4..b2a7f1c main -> origin/main
Updating 6e9c2b4..b2a7f1c
Fast-forward
main.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)Энэ удаад гаралт хоёр хэсгээс бүрдэж байгаа нь pull-ийн дотоод бүтцийг тодорхой харуулж байна. “From ...” мөр хүртэлх хэсэг бол fetch: GitHub-аас шинэ commit авч, origin/main-ийг шинэчилсэн. “Updating ...” мөрөөс эхлэх хэсэг бол merge: origin/main-ийг таны main руу fast-forward хийсэн. Нэг command, хоёр алхам. python main.py ажиллуулбал анхны фолдерт ч зарлагын тоо харагдана.
Хоёр сумны бүрэн зураглал
Одоо Бүлэг 4-ийн гол зураглалыг бүрэн болгож чадна. Дээш чиглэсэн сум нь push: таны local commit-уудыг GitHub руу илгээнэ. Доош чиглэсэн сум нь гурван хэлбэртэй. Clone бол анхны, нэг удаагийн доош сум: GitHub-аас бүрэн цомгийг шинэ фолдерт авчирч, remote болон upstream-ийг автоматаар тохируулна. Fetch бол зөвхөн мэдээ авах сум: origin/main-ийг шинэчилдэг ч таны ажилд хүрдэггүй. Pull бол бүрэн доош сум: fetch хийгээд дараа нь merge хийдэг.
Эдгээрийн алийг нь хэзээ хэрэглэх нь энгийн. Шинэ компьютер дээр эсвэл бусдын төслийг анх авахдаа clone. Аль хэдийн байгаа фолдерт өдөр тутам шинэ ажил авахдаа pull. Ажлаа хуваалцахдаа push. Fetch бол "юу өөрчлөгдсөнийг нэгтгэхээсээ өмнө харъя" гэсэн болгоомжтой үед, жишээ нь git fetch хийгээд git log --oneline main..origin/main бичиж, ирэх гэж буй commit-уудыг урьдчилан харахад хэрэглэгдэнэ.
Бусдын төслийг clone хийх
Clone зөвхөн өөрийн repository-д биш, GitHub дээрх аль ч public repository-д ажилладаг. Сонирхсон нээлттэй эх кодтой төслийнхөө хаягийг ногоон Code товчноос хуулж, clone хийвэл түүний бүх код, бүх түүх таны компьютерт ирнэ. Та тэнд чөлөөтэй уншиж, туршиж, өөрчилж болно. Гэхдээ өөрчлөлтөө push хийх гэвэл GitHub татгалзана, учир нь тэр repository таных биш. Бусдын төсөлд хувь нэмэр оруулах өөр арга бий бөгөөд түүнийг энэ сургалтын хүрээнээс гадуур үлдээнэ. Бусдын кодыг clone хийж унших нь програмчлал сурах хамгийн сайн аргуудын нэг гэдгийг санаарай.
Хүсвэл GitHub-ийн browser дээрээс шууд өөрчлөлт хийж үзээрэй. Repository хуудсандаа formatting.py дээр дарж нээгээд, баруун дээд талын харандааны icon-оор засварлах горимд орно. Функцийн дээр “# Mongolian tugrik format” гэсэн тайлбар мөр нэмээд, “Commit changes” товчийг дарж, нээгдсэн цонхонд commit message бичиж хадгална уу. Дараа нь анхны фолдертоо git pull хийж, GitHub дээр хийсэн өөрчлөлт таны компьютерт ирэхийг хараарай. Энэ нь GitHub-ийн вэб хуудас ч бас нэг "компьютер" шиг ажилладгийг харуулна.
Фолдер аль хэдийн байх.
fatal: destination path 'expense-tracker-copy' already exists and is not an empty directory.“expense-tracker-copy зам аль хэдийн байгаа бөгөөд хоосон фолдер биш” гэсэн утгатай. Clone шинэ фолдер үүсгэх ёстой ч ийм нэртэй фолдер аль хэдийн байна. Command-ын төгсгөлд өөр нэр бичих эсвэл өөр газар clone хийнэ үү. Хэрвээ тэр фолдер хуучин, хэрэггүй хуулбар бол File Explorer-оор устгаж болно, гэхдээ дотор нь push хийгээгүй ажил байгаа эсэхийг эхлээд шалгаарай.
Repository дотор clone хийх. Хэрвээ та cd ~-ийг мартаад expense-tracker фолдер дотроо clone хийвэл хуулбар анхны repository-ийн дотор үүснэ. Үүний шинж нь анхны фолдерт git status бичихэд expense-tracker-copy/ untracked гэж харагдах явдал. Хуулбарын фолдерыг зөв газар руу File Explorer-оор зөөх эсвэл устгаад дахин clone хийнэ үү. Clone хийхийн өмнө pwd-ээр байршлаа шалгах дадал энэ алдаанаас бүрэн сэргийлнэ.
Pull хийхэд commit хийгээгүй өөрчлөлт саад болох.
Updating 1d3e5a7..6e9c2b4
error: Your local changes to the following files would be overwritten by merge:
report.py
Please commit your changes or stash them before you merge.
AbortingЭнэ мессежийг 3.3 дугаар хичээлээс таньж байгаа. Pull нь merge агуулдаг тул merge-ийн хамгаалалт энд ч ажилладаг. Таны report.py-д commit хийгээгүй өөрчлөлт байгаа бөгөөд ирж буй commit тэр файлыг өөрчлөх гэж байна. Өөрчлөлтөө commit хийх эсвэл git restore-оор хаяад pull-ээ дахин оролдоно уу. Pull хийхийн өмнө ажлын фолдероо цэвэр байлгах нь салаа солих, merge хийхтэй адил сайн дадал.
Upstream тохируулаагүй салаа дээр pull хийх.
There is no tracking information for the current branch.
Please specify which branch you want to merge with."Одоогийн салаанд дагах мэдээлэл алга" гэсэн утгатай. Таны салаа GitHub дээрх аль салаатай холбоотойг Git мэдэхгүй байна. Энэ нь ихэвчлэн local дээр шинээр үүсгэсэн, хэзээ ч -u-тэй push хийгээгүй салаан дээр тохиолддог. Мессежийн доор Git тохируулах command-ыг санал болгоно. Main салааны хувьд git branch --set-upstream-to=origin/main main гэж бичвэл холболт тохируулагдана.
Clone хийсэн хуулбарт программ ажиллахгүй байх. Дээр харсан FileNotFoundError эсвэл ModuleNotFoundError нь clone-ийн дараа маш түгээмэл. Шалтгаан нь үргэлж нэг: repository-д ороогүй зүйл хуулбарт ирэхгүй. Venv-ээ шинээр үүсгэж, шаардлагатай package-уудыг суулгаж, .gitignore-д байгаа өгөгдлийн файлуудыг гараар бэлдэх хэрэгтэй. Энэ алдааг "миний repository-д юу дутуу байна вэ" гэсэн асуултын хариу гэж харах нь зүйтэй.
git clone <хаяг> [фолдер] GitHub дээрх repository-гийн бүх түүхтэй бүрэн хуулбарыг шинэ фолдерт авчирч, origin remote болон upstream-ийг автоматаар тохируулдаг. Clone хийхийн өмнө ямар ч repository-оос гадуур байгаа эсэхээ шалгана. Clone зөвхөн commit хийгдсэн зүйлийг авчирдаг тул venv болон .gitignore-д байгаа файлуудыг хуулбарт дахин бэлдэх шаардлагатай. git status интернэтэд холбогддоггүй, origin/main-ийн хуучирсан тэмдэглэлээр харьцуулдаг тул GitHub дээр өөрчлөлт гарсан ч “up to date” гэж хэлж болно. git fetch GitHub-аас мэдээ авч origin/main-ийг шинэчилдэг ч таны ажилд хүрдэггүй, дараа нь status “behind” гэж хэлнэ. git pull бол fetch болон merge-ийн нийлбэр: шинэ commit-уудыг аваад таны салаанд нэгтгэдэг. Push дээш, clone ба pull доош чиглэсэн сумнууд юм.
Дараагийн хичээлд хоёр фолдероо хоёр компьютерийн бүрэн дүр төрх болгон ашиглана. Хоёр газар зэрэг ажиллаж, нэг нь нөгөөгөөсөө хоцорсон үед push хийхэд GitHub татгалзахыг өөрийн нүдээр харж, түүний мессежийг мөр мөрөөр уншиж, pull-ээр засна. Мөн ажил эхлэхийн өмнө pull хийх нь яагаад зайлшгүй дадал болдгийг ойлгоно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.