SSD Nodes Learn 🎉 VPS $5.50/மாதம் முதல்
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-13

GitHub என்றால் என்ன? Git மற்றும் GitHub இடையிலான வேறுபாடு

Git என்பது உங்கள் கணினியில் இயங்கும் version control கருவி. GitHub என்பது அதன் சேமிப்பகம். VPS பயனர்கள் ஏன் இரண்டையும் தனித்தனியாகப் புரிந்துகொள்ள வேண்டும் என்பதை விளக்குகிறோம்.

GitHub என்றால் என்ன?

GitHub என்பது Git repositories-ஐச் சேமித்து, அவற்றைச் சுற்றி ஒரு இணையதளத்தை உருவாக்கும் ஒரு hosted service ஆகும். Git என்பது உங்கள் கணினியிலோ அல்லது உங்கள் server-லோ இயங்கும் ஒரு version control நிரலாகும். GitHub என்பது Git-ன் மேல் இயங்கும் ஒரு நிறுவனத்தின் தயாரிப்பு; இது 2018 முதல் Microsoft-ன் உரிமையில் உள்ளது. நீங்கள் தினமும் Git-ஐப் பயன்படுத்தலாம், ஆனால் ஒருமுறை கூட GitHub-ஐத் திறக்க வேண்டிய அவசியம் இருக்காது. ஆனால், Git இல்லாமல் உங்களால் GitHub-ஐப் பயன்படுத்த முடியாது.

நீங்கள் ஒரு VPS (virtual private server)-ஐ வைத்திருக்கும் தருணத்தில் இந்த வேறுபாடு முக்கியமானது. உங்கள் config files மற்றும் deploy scripts-ன் வரலாற்றைப் பதிவு செய்வது Git ஆகும். உங்கள் server-ல் அந்த வரலாறு இல்லாதபோது, அதன் ஒரு நகலைச் சேமித்து வைக்கும் இடமாகவும், builds மற்றும் reviews-ஐ இயக்கும் இடமாகவும் GitHub செயல்படுகிறது. இந்த வழிகாட்டி, ஒரு காலியான கோப்புறையிலிருந்து (empty folder) server-ல் deploy செய்வது வரையிலான ஒரு உதாரணத்தைப் பின்பற்றுகிறது, மேலும் ஒவ்வொரு புதிய சொல்லையும் அது அறிமுகமாகும் இடத்திலேயே விளக்குகிறது.

Git தானாகவே என்ன செய்கிறது

Git என்பது ஒரு version control system ஆகும்: இது ஒரு directory-ன் நிலையை காலப்போக்கில் பதிவு செய்கிறது, எனவே என்ன மாற்றப்பட்டது, எப்போது, ஏன் என்பதை உங்களால் பார்க்க முடியும். இது 2005-ல் Linux kernel பணிக்காக உருவாக்கப்பட்டது. இது distributed முறையில் இயங்குகிறது, அதாவது ஒரு repository-ன் ஒவ்வொரு நகலும் முழு வரலாற்றையும் கொண்டிருக்கும். இதன் வடிவமைப்பில் மையப்படுத்தப்பட்ட server எதுவும் இல்லை. ஒரு சக ஊழியரின் laptop-ல் உள்ள நகலும், எந்தவொரு server-ல் உள்ள நகலைப் போலவே முழுமையானது.

இதை install செய்து உங்கள் அடையாளத்தை அமைக்கவும். பெயர் மற்றும் மின்னஞ்சல் முகவரி இல்லாமல் ஒரு commit-ஐப் பதிவு செய்ய Git மறுத்துவிடும், ஏனெனில் இவை இரண்டும் commit-க்குள்ளேயே எழுதப்படுகின்றன.

sudo apt update && sudo apt install -y git
git --version
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

Ubuntu 24.04-ல், git --version கட்டளை git version 2.43.0-ஐ அச்சிடுகிறது. கடந்த சில ஆண்டுகளில் வெளியான எந்தவொரு பதிப்பும் கீழே உள்ள அனைத்திற்கும் ஒரே மாதிரியாகவே செயல்படும்.

உதாரணம்: உங்கள் VPS deploy கோப்புகளுக்கான ஒரு repository

ஒரு repository, சுருக்கமாக "repo" என்று அழைக்கப்படுவது, Git கண்காணிப்பில் உள்ள ஒரு directory ஆகும். நீங்கள் git init கட்டளையை இயக்கும்போது அது repository-ஆக மாறுகிறது; இது அந்த directory-க்குள் .git என்ற மறைக்கப்பட்ட கோப்புறையை உருவாக்குகிறது. அந்த கோப்புறையே உண்மையான repository ஆகும். .git-ஐ நீக்கினால், வரலாற்றைப் பராமரிக்காத ஒரு சாதாரண directory மட்டுமே எஞ்சியிருக்கும்.

mkdir vps-deploy && cd vps-deploy
git init -b main
printf '.env\n*.key\n' > .gitignore

-b main கட்டளையானது முதல் branch-க்கு main என்று பெயரிடுகிறது. இதைத் தவிர்க்கும்போது, default branch பெயர் குறித்த நீண்ட குறிப்பை Git வெளியிடும். .gitignore கோப்பு, Git கண்காணிக்கக்கூடாத பாதைகளை பட்டியலிடுகிறது. உங்கள் secrets கோப்பை முதல் நாளிலேயே இதில் எழுதிவிடுங்கள்; ஏனெனில் ஒருமுறை commit செய்யப்பட்ட கோப்பு, நீங்கள் அதை நீக்கினாலும் வரலாற்றில் அப்படியே இருக்கும். அதை முறையாக நீக்க வேண்டுமென்றால், அதற்குப் பிறகு வந்த ஒவ்வொரு commit-ஐயும் மீண்டும் எழுத வேண்டியிருக்கும்.

Commits: வரலாற்றின் அலகு

இப்போது ஒரு script-ஐச் சேர்த்து, அதை பதிவு செய்யவும்.

printf '#!/bin/sh\nsudo systemctl restart caddy\n' > restart.sh
git add restart.sh .gitignore
git commit -m "Add restart script and gitignore"
git log --oneline

git add ஒரு மாற்றத்தை staging area-க்கு நகர்த்துகிறது; இது அடுத்த commit-ல் இடம்பெற வேண்டிய கோப்புகளின் பட்டியல் ஆகும். git commit அந்தப் பட்டியலை வரலாற்றில் ஒரு பதிவாக எழுதுகிறது. ஒரு commit என்பது கண்காணிக்கப்படும் அனைத்து கோப்புகளின் snapshot, ஒரு செய்தி, ஆசிரியர், நேர முத்திரை (timestamp) மற்றும் அதற்கு முந்தைய commit-ஐக் குறிக்கும் pointer ஆகியவற்றைக் கொண்டிருக்கும். git log --oneline ஒவ்வொரு commit-க்கும் ஒரு வரியை அச்சிடுகிறது; ஒவ்வொன்றும் a1b2c3d போன்ற ஒரு சிறிய hash-உடன் தொடங்கும். அந்த hash என்பது commit-ன் பெயர், கிட்டத்தட்ட அனைத்து Git கட்டளைகளும் அதை ஏற்கும்.

git add படியைத் தவிர்த்தால், git commit-க்கு no changes added to commit (use "git add" and/or "git commit -a") விடையளிக்கும். இதில் எதுவும் பழுதடையவில்லை. staging area காலியாக இருப்பதால், snapshot எடுக்க எதுவும் இல்லை என்று Git உங்களுக்குத் தெரிவிக்கிறது. நீங்கள் குழப்பமடையும் போதெல்லாம் இயக்க வேண்டிய கட்டளை git status ஆகும்: இது தற்போதைய branch, staged மாற்றங்கள் மற்றும் Git-ஆல் பார்க்கக்கூடிய ஆனால் கண்காணிக்கப்படாத கோப்புகளைப் பட்டியலிடும்.

கிளைகள் (Branches): வரலாற்றின் இரண்டாவது வரிசை

ஒரு branch என்பது ஒரு commit-ஐச் சுட்டிக்காட்டும் நகரும் pointer ஆகும். main என்பது ஒரு branch, இது Git-ல் எந்த விதத்திலும் தனித்துவமானது அல்ல. ஒரு புதிய pointer-ஐ எழுதுவதைத் தவிர, உங்கள் கோப்புகளை நகலெடுக்காததால், இதை உருவாக்குவதற்கு எந்தச் செலவும் இல்லை.

git switch -c add-backup
printf '#!/bin/sh\nrestic backup /srv\n' > backup.sh
git add backup.sh
git commit -m "Add nightly backup"
git switch main
ls

git switch main-க்கு பிறகு, backup.sh பட்டியலில் இல்லை. எதுவும் நீக்கப்படவில்லை. அந்த கோப்பு add-backup branch-ல் உள்ளது, மேலும் main-ல் அது எப்போதும் இருந்ததில்லை, எனவே நீங்கள் மாறியபோது Git அதை உங்கள் working directory-யிலிருந்து நீக்கிவிட்டது. இது அனைவருக்கும் ஒருமுறை ஆச்சரியத்தை அளிக்கும். git switch add-backup அதை மீண்டும் கொண்டு வரும்.

Remotes: GitHub இறுதியாகத் தோன்றும் இடம்

இதுவரை அனைத்தும் எந்தவிதமான பிணையத் தொடர்பும் இன்றி ஒரே கணினியில் இயங்கின. ஒரு remote என்பது அதே களஞ்சியத்தின் (repository) மற்றொரு நகலுக்கான பெயரிடப்பட்ட URL ஆகும். GitHub உங்களுக்காக அத்தகைய நகல் ஒன்றைப் பராமரிக்கிறது. முதன்மை remote-க்கு வழக்கமாக வழங்கப்படும் பெயர் origin ஆகும்.

GitHub இணையதளம் வழியாக ஒரு காலி களஞ்சியத்தை உருவாக்கி, அதனுடன் இணையுங்கள். இதில் HTTPS-ஐ விட SSH-ஐத் தேர்வு செய்வது சிறந்தது: SSH key என்பது உங்கள் கட்டுப்பாட்டில் உள்ள ஒரு கோப்பு, இது personal access token போல காலாவதியாகாது.

ssh-keygen -t ed25519 -C "vps-deploy"
cat ~/.ssh/id_ed25519.pub
ssh -T git@github.com

திரையில் காட்டப்படும் public key-ஐ நகலெடுத்து, உங்கள் GitHub கணக்கின் SSH keys பக்கத்தில் பதிவேற்றி, சோதனையை மீண்டும் இயக்கவும். சரியாகச் செயல்படும் key, Hi yourname! You've successfully authenticated, but GitHub does not provide shell access. என்ற பதிலை வழங்கும். GitHub உங்களுக்கு shell அணுகலை வழங்காது, எனவே அந்த மறுப்புதான் வெற்றிகரமான முடிவாகும். git@github.com: Permission denied (publickey). என்பது உங்கள் key வழங்கப்படவில்லை அல்லது ஏற்றுக்கொள்ளப்படவில்லை என்று பொருள்; எனவே நீங்கள் .pub கோப்பைத்தான் பதிவேற்றியுள்ளீர்களா, அதன் அருகில் உள்ள private key-ஐ அல்ல என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.

git remote add origin git@github.com:yourname/vps-deploy.git
git push -u origin main

git push உங்கள் commits-களை remote-க்கு அனுப்பும். -u என்பது உள்ளூர் main, remote main-ஐப் பின்தொடர்கிறது என்பதைப் பதிவு செய்யும், இதனால் பிற்காலத்தில் வெறும் git push கட்டளையே போதுமானதாக இருக்கும். git clone <url> என்பது புதிய கணினியில் இதற்கு நேர்மாறானது: இது களஞ்சியத்தின் முழு வரலாறு மற்றும் கோப்புகளுடன் நகலெடுத்து, உங்களுக்காக origin-ஐ அமைக்கும். HTTPS remote-ம் வேலை செய்யும், இது இணையப் பக்கங்கள் பயன்படுத்தும் அதே protocol-ல் இயங்குவதால், 22-வது port-ஐத் தடுக்கும் பிணையங்களில் இது பயனுள்ளதாக இருக்கும். இந்த வாக்கியத்தைப் பற்றி மேலும் அறிய, HTTP request என்றால் என்ன என்ற பகுதியில் அதன் செயல்பாடுகளைப் பார்க்கலாம்.

Pull requests, issues மற்றும் forks: இவை Git அல்ல, GitHub-ன் அம்சங்கள்

மேலே விவரிக்கப்பட்டவை அனைத்தும் Git சார்ந்தவை, இவை எந்தவொரு server-லும் இயங்கும். கீழே உள்ள மூன்று சொற்களும் GitHub-ன் பிரத்யேக அம்சங்கள் ஆகும். பிற hosting தளங்கள் இவற்றை நகலெடுத்துள்ளன, ஆனால் Git மென்பொருளுக்கு இவை பற்றித் தெரியாது.

Pull request (PR) என்பது ஒரு branch-ஐ மற்றொரு branch-உடன் இணைப்பதற்கான கோரிக்கை ஆகும்; இது விவாதங்களுக்கான ஒரு பக்கத்துடன் இணைக்கப்பட்டிருக்கும். நீங்கள் add-backup-ஐ push செய்து, main-க்கு எதிராக ஒரு PR-ஐ உருவாக்கும்போது, அந்தத் தளம் ஒவ்வொரு commit-ஆக மாற்றங்களைக் காட்டும். பயனர்கள் குறிப்பிட்ட வரிகளில் கருத்துகளைப் பதிவிடலாம். தானியங்கி சோதனைகள் (automated checks) அந்த branch-ன் நிலையை pass அல்லது fail எனத் தெரிவிக்கும். Merge பொத்தானை அழுத்தினால், GitHub தனது நகலில் அந்த இணைப்பைச் செய்துவிட்டு, main-ஐப் புதுப்பிக்கும். ஒரு பராமரிப்பாளரிடம் உங்கள் branch-ஐ அவர்களின் branch-க்குள் pull செய்யக் கோரும் பழைய பணிப்பாய்விலிருந்து (workflow) இந்தப் பெயர் உருவானது.

Issue என்பது ஒரு பிழை (bug) அல்லது பணிக்காக உருவாக்கப்பட்ட எண்ணிடப்பட்ட உரையாடல் தொடர் ஆகும். இது உங்கள் repository-க்குள் இல்லாமல், GitHub-ன் database-ல் சேமிக்கப்படுகிறது. ஒரு hosting தளத்தைத் தேர்ந்தெடுக்கும் முன் இதை அறிவது அவசியம்: நீங்கள் ஒரு repo-வை clone செய்தால் அனைத்து commit-களும் கிடைக்கும், ஆனால் ஒரு issue கூட கிடைக்காது. Issue-களைப் பெற API-ஐப் பயன்படுத்த வேண்டும்.

Fork என்பது மற்றொருவரின் repository-ஐ உங்கள் server-ல் நீங்கள் வைத்திருக்கும் சொந்த நகல் ஆகும். அந்த நகலில் உங்களுக்கு எழுதும் உரிமை (write access) உண்டு; நீங்கள் ஒரு branch-ஐ அதற்கு push செய்து, உங்கள் நகலிலிருந்து அவர்களின் repository-க்கு ஒரு pull request-ஐ உருவாக்கலாம். உங்களை அறியாத பராமரிப்பாளர்களைக் கொண்ட ஒரு திட்டத்திற்கு நீங்கள் பங்களிக்க இதுவே வழி. Fork என்பது GitHub-ல் இருக்கும் ஒரு clone ஆகும், இது தான் எங்கிருந்து உருவானது என்பதை நினைவில் வைத்திருக்கும்.

மென்பொருள்கள் இந்த மூன்றையும் மனிதர்கள் பயன்படுத்தும் அதே API மூலமே வாசிக்கின்றன. நீங்கள் உங்கள் சொந்த server-ல் இயக்கும் pull request review agent புதிய PR-களைக் கண்காணித்து, மாற்றங்களை (diff) வாசித்து, வரிகளில் கருத்துகளைப் பதிவிடும். ஒரு repository-ஐ மனிதர்கள் மட்டுமல்லாது கருவிகளும் வாசிப்பதால், repository-ன் root-ல் AGENTS.md கோப்பு போன்ற மரபுகள் தற்போது நடைமுறையில் உள்ளன.

ஒரு VPS உரிமையாளருக்கு GitHub உண்மையில் என்ன செய்கிறது

சர்வருக்கு வெளியே சேமிப்பகத்தைப் பயன்படுத்துவதில் தொடங்குங்கள். உங்கள் deploy scripts மற்றும் playbooks ஆகியவை அவை கட்டமைக்கும் சர்வரில் இருக்கக்கூடாது. ஒரு புதிய image-லிருந்து VPS-ஐ மீண்டும் உருவாக்கி, clone செய்து, இயக்கவும். அந்த repository-ஐ private-ஆக வைத்திருங்கள் மற்றும் சர்வர் ஒரு deploy key-ஐப் பயன்படுத்தும்படி செய்யுங்கள்: இது உங்கள் முழு கணக்கிற்கும் பதிலாக ஒரு குறிப்பிட்ட repository-க்கு மட்டும் பதிவு செய்யப்பட்ட, read-only வசதி கொண்ட ஒரு SSH key ஆகும். கசிந்த ஒரு read-only deploy key ஒரு repository-ஐ மட்டுமே பாதிக்கும். ஆனால் கசிந்த ஒரு account key, நீங்கள் push செய்யக்கூடிய அனைத்தையும் பாதிக்கும்.

sudo git clone git@github.com:yourname/vps-deploy.git /srv/vps-deploy
cd /srv/vps-deploy
git pull --ff-only

--ff-only ஒரு merge commit-ஐ உருவாக்க மறுக்கிறது. மாற்றங்களை மட்டுமே ஏற்கும் ஒரு சர்வரில், merge என்பது எப்போதும் ஒரு விபத்தாகவே இருக்கும். எனவே, இந்த flag குழப்பமான வரலாற்றை ஒரு தெளிவான பிழையாக மாற்றுகிறது: fatal: Not possible to fast-forward, aborting. சர்வரில் மாறக்கூடாத ஏதோ ஒன்று மாறியுள்ளது. மீண்டும் pull செய்வதற்கு முன் அதைக் கண்டறியவும்.

root பயனராக clone செய்துவிட்டு, மற்றொரு பயனராக Git-ஐ இயக்கினால், உங்களுக்கு fatal: detected dubious ownership in repository at '/srv/vps-deploy' பிழை கிடைக்கும். வேறொரு பயனருக்குச் சொந்தமான repository-ஐப் படிக்க Git மறுக்கிறது, ஏனெனில் ஒரு விரோதமான .git/config Git-ஐக் கொண்டு கட்டளைகளை இயக்கக்கூடும். safe.directory விதிவிலக்கைச் சேர்ப்பதற்குப் பதிலாக, chown மூலம் ownership-ஐச் சரிசெய்யவும். ஏனெனில், விதிவிலக்கு என்பது காரணத்தை நீக்காமல், அந்தச் சரிபார்ப்பை மட்டும் அமைதிப்படுத்துகிறது.

GitHub Actions: build மற்றும் deploy pipelines

Actions என்பது GitHub-ன் CI/CD (continuous integration மற்றும் continuous delivery) அமைப்பாகும். .github/workflows/-ன் கீழ் ஒரு YAML கோப்பை commit செய்தால், நீங்கள் குறிப்பிட்ட நிகழ்வு நடக்கும்போது GitHub அதை இயக்கும்.

name: check
on:
  push:
    branches: [main]
jobs:
  shellcheck:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - run: sudo apt-get update && sudo apt-get install -y shellcheck
      - run: shellcheck *.sh

இந்தக் கோப்பு ஒரு workflow ஆகும். ஒரு job ஒரு கணினியில் இயங்கும். ஒரு step என்பது ஒரு கட்டளை அல்லது வெளியிடப்பட்ட ஒரு action ஆகும். uses: மற்றொரு repository-லிருந்து ஒரு action-ஐப் பெற்றுக்கொள்ளும், மேலும் @v7 அதன் major version-ஐ நிலைநிறுத்தும் (ஆகஸ்ட் 2026 நிலவரப்படி actions/checkout-க்கு v7 தற்போதைய பதிப்பாகும்). எப்போதும் ஒரு version-ஐ நிலைநிறுத்துங்கள், ஏனெனில் நிலைநிறுத்தப்படாத action என்பது நீங்கள் படிக்காத குறியீடு உங்கள் secrets-ஐ அணுகும் உரிமையுடன் இயங்குவதைக் குறிக்கும்.

runs-on: ubuntu-latest ஒரு புதிய virtual machine-ஐ GitHub-இடம் கோரும், job முடிந்ததும் அது நீக்கப்படும். பொதுவான repositories-க்கு standard runners இலவசம், மேலும் ஆகஸ்ட் 2026 நிலவரப்படி, தனிப்பட்ட repositories-க்கு மாதத்திற்கு 2,000 நிமிடங்கள் இலவசத் திட்டத்தில் அடங்கும். அந்த எண்ணிக்கையை வைத்து பட்ஜெட் போடுவதற்கு முன் தற்போதைய விலை நிர்ணயப் பக்கத்தைச் சரிபார்க்கவும்.

Secrets என்பவை repository settings-ல் சேமிக்கப்பட்டு ${{ secrets.DEPLOY_KEY }} மூலம் வாசிக்கப்படுகின்றன. ஒரு fork-லிருந்து வரும் pull request மூலம் தூண்டப்படும் workflow-க்கு read-only token மட்டுமே கிடைக்கும், அதற்கு அந்த secrets-ஐ அணுகும் உரிமை இருக்காது. இல்லையெனில், ஒரு அந்நியர் PR-ஐத் திறந்து, அந்த secrets-ஐ அச்சிடுவதை மட்டுமே நோக்கமாகக் கொண்ட ஒரு job-ஐ இயக்க வாய்ப்புள்ளது.

உங்கள் சொந்த VPS-ல் Actions runner-ஐ இயக்குதல்

runs-on: self-hosted ஆனது வேலையை நீங்கள் வைத்திருக்கும் ஒரு கணினிக்கு அனுப்புகிறது. களஞ்சியத்தின் (repository) runner அமைப்புகள் பக்கம் உங்களுக்கு ஒரு download வரியையும், களஞ்சியத்தின் இணைய முகவரியையும், ஒரு மணிநேரம் செல்லுபடியாகும் பதிவு டோக்கனையும் (registration token) வழங்கும். அந்த இரண்டையும் REPO_URL மற்றும் RUNNER_TOKEN-ல் உள்ளிடவும், அதன் பிறகு அமைப்பு மூன்று கட்டளைகளைக் கொண்டது.

./config.sh --url "$REPO_URL" --token "$RUNNER_TOKEN"
sudo ./svc.sh install
sudo ./svc.sh start
./svc.sh status

svc.sh status ஆனது service-ஐ active நிலையில் காட்ட வேண்டும் மற்றும் சமீபத்திய log வரிகளைக் காண்பிக்க வேண்டும். runner ஆனது GitHub-க்கு ஒரு outbound HTTPS இணைப்பைத் திறந்து பணிக்காகக் கேட்கிறது, எனவே நீங்கள் எந்த inbound port-ஐயும் இதற்காகத் திறக்க வேண்டியதில்லை. svc.sh install ஆனது systemd unit-ஐ உருவாக்குகிறது, இதுவே மக்கள் தவிர்க்கும் படியாகும்: இது இல்லையென்றால், உங்கள் SSH session முடிவடையும் போது runner-ம் வெளியேறிவிடும், மேலும் அதன் பிறகு வரும் ஒவ்வொரு வேலையும் எந்த விளக்கமும் இன்றி வரிசையில் (queued) காத்திருக்கும். VPS-ல் self-hosted runner-ஐ முழுமையாக அமைத்தல் என்பது நீண்ட காலம் இயங்கும் runner-க்குத் தேவையான பாதுகாப்பு மற்றும் பராமரிப்பு முறைகளை விளக்குகிறது.

இதன் பயன் என்னவென்றால், ஒரு deploy-க்கு இணையத்திலிருந்து அணுகக்கூடிய inbound SSH key தேவையில்லை, ஏனெனில் அந்த வேலை ஏற்கனவே அந்த கணினியில் இயங்குகிறது. build cache-ம் இயங்குதல்களுக்கு இடையே அப்படியே இருக்கும், மேலும் நிமிடக் கணக்கீடும் (minute meter) இருக்காது.

ஒரு எச்சரிக்கை மிக முக்கியமானது. GitHub-ன் சொந்த ஆவணங்கள் self-hosted runner-களை private களஞ்சியங்களுக்கு மட்டுமே பரிந்துரைக்கின்றன, ஏனெனில் பொதுக் களஞ்சியத்தின் (public repository) forks, pull request-ஐத் திறப்பதன் மூலம் உங்கள் runner-ல் ஆபத்தான குறியீட்டை இயக்க முடியும். அந்த branch-ல் உள்ள workflow கோப்பு எதைச் சொல்கிறதோ, அதை runner இயக்கும். யார் push செய்யலாம் என்பதைக் கட்டுப்படுத்தும் private களஞ்சியத்தில், ஆபத்து குறைவு. பொதுக் களஞ்சியத்தில், எந்தவொரு self-hosted runner-ஐயும் அந்நியர்கள் குறியீட்டை இயக்கக்கூடிய ஒரு கணினியாகவே கருத வேண்டும்.

GitHub உங்களுக்குத் தேவையா?

இல்லை. Git என்பது தரநிலையானது, GitHub என்பது ஒரு வசதி மட்டுமே. Forgejo மற்றும் Gitea ஆகியவை self-hosted forges ஆகும். ஒரு forge என்பது Git host-உடன் issues மற்றும் pull requests வசதிகளை உள்ளடக்கியதாகும். இவை இரண்டும் ஒற்றை Go binary-ஆகக் கிடைக்கின்றன, மேலும் சிறிய VPS-ல் இயங்கக்கூடியவை. Forgejo என்பது 2022-ல் Gitea-விலிருந்து பிரிக்கப்பட்ட (fork) ஒரு மென்பொருள், இது தற்போது Codeberg-ஐ இயக்குகிறது. இவை இரண்டின் wire protocol-ம் ஒன்றாக இருப்பதால், ஒரு repository-ஐ மாற்றுவது ஒரே ஒரு command-ன் வேலைதான்.

git remote -v
git remote set-url origin git@git.example.com:you/vps-deploy.git
git push origin main

ஒவ்வொரு clone-லும் முழுமையான history இருப்பதால், ஒவ்வொரு commit-ம் இடம்பெயரும். ஆனால் GitHub உருவாக்கிய கூடுதல் அடுக்குகள் இடம்பெயராது: அதாவது issues மற்றும் pull request threads போன்றவை மாறாது. CI-ம் தானாக மாறாது. Forgejo-விற்கு எனத் தனி Actions implementation உள்ளது, இது .forgejo/workflows/-லிருந்து ஒத்த YAML-ஐப் படிக்கும். GitHub Actions மற்றும் Forgejo Actions ஆகியவை ஒன்றல்ல என்றும், சில விஷயங்கள் உடனடியாகச் சரியாக வேலை செய்யாமல் போகலாம் என்றும் அதன் ஆவணங்கள் தெளிவாகக் கூறுகின்றன. இதற்குத் தனி runner-ம் தேவை. இந்த மாற்றத்தை ஒரு நகலாக (copy) கருதாமல், ஒரு port-ஆகத் திட்டமிடுங்கள்.

பெரும்பாலான திட்டங்கள் GitHub-லேயே இருப்பதற்குக் காரணம் contributors-தான். பொதுமக்களுக்கான code, மக்கள் ஏற்கனவே கணக்கு வைத்திருக்கும் இடத்தில் இருக்க வேண்டும். ஆனால் உங்கள் private deploy scripts அவ்வாறு இருக்க வேண்டிய அவசியமில்லை. இவை இரண்டு தனித்தனி முடிவுகள், இரண்டிற்கும் நீங்கள் வெவ்வேறு பதில்களைத் தேர்வு செய்யலாம்.

எது முதலில் செயலிழக்கிறது மற்றும் பிழைச் செய்தி என்ன சொல்கிறது

ஒரு push நிராகரிக்கப்படுகிறது. நீங்கள் இதைப் பார்க்கிறீர்கள்:

 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'github.com:yourname/vps-deploy.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally.

நீங்கள் கடைசியாக pull செய்த பிறகு ஏதோ ஒன்று push செய்யப்பட்டுள்ளது, பெரும்பாலும் இணைய எடிட்டரில் நீங்கள் செய்த மாற்றமாக இருக்கலாம். அவர்களின் commits-க்கு மேல் உங்கள் commits-ஐ மீண்டும் இயக்க git pull --rebase கட்டளையை இயக்கவும், பிறகு மீண்டும் push செய்யவும். பகிரப்பட்ட கிளையில் (shared branch) git push --force கட்டளையைத் தவிர்க்கவும், ஏனெனில் இது சர்வரில் உள்ள மற்றவர்களின் commits-ஐ நீக்கிவிடும்.

fatal: refusing to merge unrelated histories. நீங்கள் உள்ளூரில் git init கட்டளையை இயக்கினீர்கள் மற்றும் GitHub-ல் README கோப்புடன் ஒரு repository-ஐ உருவாக்க அனுமதித்தீர்கள். இந்த இரண்டு வரலாறுகளும் எந்தவொரு பொதுவான commit-ஐயும் கொண்டிருக்கவில்லை, எனவே Git தானாக எதையும் கணிக்காது. இதற்கான சரியான தீர்வு, GitHub-ல் உள்ள நகலை ஒரு புதிய கோப்புறையில் clone செய்து, உங்கள் கோப்புகளை அதற்குள் நகர்த்துவதாகும்.

error: src refspec main does not match any. நீங்கள் குறிப்பிட்ட கிளை (branch) இங்கே இல்லை. பொதுவாக repository-ல் இதுவரை எந்த commit-களும் இருக்காது, அல்லது உங்கள் கிளையின் பெயர் master என்று இருக்கலாம். git branch --show-current கட்டளை இதைச் சரிசெய்யும்.

ஒரு ரகசியத் தகவல் (secret) commit-க்குள் சென்றுவிட்டது. அந்தச் சான்றுகளை (credential) உடனடியாக மாற்றவும் (rotate). அது push செய்யப்பட்ட தருணத்திலிருந்தே பொதுவெளியில் இருப்பதாகக் கருதவும், ஏனெனில் forks, mirrors மற்றும் cached காட்சிகள் ஆகியவற்றில் அதன் நகல்கள் இருக்கும், அவற்றை உங்களால் நீக்க முடியாது.

FAQ

GitHub-ம் Git-ம் ஒன்றா?

இல்லை. Git என்பது ஒரு கணினியில் நீங்கள் நிறுவும் version control மென்பொருள்; இது இணைய இணைப்பு அல்லது கணக்கு (account) இல்லாமலேயே இயங்கும். GitHub என்பது Git repositories-ஐச் சேமித்து வைக்கும் ஒரு வணிக ரீதியான hosted service ஆகும்; இது web interface, issues, pull requests மற்றும் CI போன்ற வசதிகளை வழங்குகிறது. Git 2005-ல் வெளியிடப்பட்டது, GitHub அதன் அடிப்படையில் 2008-ல் தொடங்கப்பட்டது. GitHub இல்லாமலேயே நீங்கள் Git-ஐ எப்போதும் பயன்படுத்தலாம். GitHub-ன் ஒவ்வொரு வசதியும் அடிப்படையான Git-ஐச் சார்ந்தே இயங்குகிறது.

எனது VPS-ல் Git-ஐப் பயன்படுத்த GitHub கணக்கு அவசியமா?

இல்லை. git init, git commit மற்றும் git log ஆகியவற்றை எந்த remote-ம் configure செய்யாமலேயே ஒரு server-ல் பயன்படுத்த முடியும்; இது /etc கோப்புகளில் ஏற்படும் மாற்றங்களைக் கண்காணிக்க அல்லது scripts-ஐ deploy செய்யப் போதுமானது. server-ன் தரவுகள் அழியாமல் இருக்க history-ன் நகல் தேவைப்படும்போதோ அல்லது மற்றொரு கணினியில் clone செய்ய வேண்டியிருக்கும்போதோதான் கணக்கு பயனுள்ளதாக இருக்கும். Forgejo மற்றும் Gitea போன்ற self-hosted forges உங்கள் சொந்த hardware-ல் அதே தேவையைப் பூர்த்தி செய்கின்றன. மேலும், எந்த forge மென்பொருளும் இல்லாமல், மற்றொரு கணினியில் உள்ள bare repository-க்கு ஒரு plain SSH remote-ஐ அமைப்பதும் வேலை செய்யும்.

pull request என்றால் என்ன?

ஒரு branch-ஐ மற்றொன்றுடன் இணைக்கக் கோரும் வேண்டுகோளே pull request ஆகும்; இதனுடன் ஒரு கலந்துரையாடல் பக்கமும் இணைக்கப்பட்டிருக்கும். நீங்கள் ஒரு branch-ஐ push செய்து, main-க்கு எதிராக PR-ஐத் திறந்தால், அந்த host மாற்றங்களை commit வாரியாகக் காட்டும். இதனால் reviewers ஒவ்வொரு வரியிலும் கருத்து தெரிவிக்க முடியும், மேலும் தானியங்கி சோதனைகள் (automated checks) வெற்றி அல்லது தோல்வியைப் புகாரளிக்க முடியும். இது Git-ன் வசதி அல்ல, GitHub-ன் வசதி; எனவே Git-ல் இதற்கெனத் தனி command கிடையாது. பிற hosts இதே கருத்தாக்கத்தை நடைமுறைப்படுத்துகின்றன, சில நேரங்களில் இதை merge request என்றும் அழைக்கின்றன.

எனது சொந்த VPS-ல் GitHub Actions runner-ஐ இயக்க வேண்டுமா?

Private repository-க்கு, பெரும்பாலும் ஆம். நீங்கள் ஏற்கனவே பணம் செலுத்தும் hardware-ல் இந்த வேலைகள் நடக்கும், minutes கணக்கிடப்படாது, build cache அப்படியே இருக்கும். மேலும், runner இணையம் வழியாக GitHub-ஐத் தொடர்புகொண்டு வேலைகளைக் கோருவதால், deploy செய்வதற்கு இணையத்தில் SSH key-ஐத் திறந்து வைக்க வேண்டிய அவசியமில்லை. Public repository-க்கு, இதைச் செய்ய வேண்டாம் என்று GitHub அறிவுறுத்துகிறது: எவரும் உங்கள் repo-வை fork செய்து, உங்கள் கணினியில் code-ஐ இயக்கும் workflow-ஐக் கொண்ட pull request-ஐ உருவாக்க முடியும்.

எனது repositories-ஐப் பிற்காலத்தில் GitHub-லிருந்து மாற்ற முடியுமா?

Code-ஐ எளிதாக மாற்றலாம். ஒவ்வொரு clone-லும் முழுமையான history இருப்பதால், git remote set-url origin <new url> மற்றும் அதைத் தொடர்ந்து ஒரு push செய்வதன் மூலம் commit-ல் உள்ள அனைத்தையும் நகர்த்த முடியும். GitHub-க்குச் சொந்தமான அடுக்குகள் மட்டுமே அங்கு தங்கிவிடும்: issues, pull request கலந்துரையாடல்கள் மற்றும் Actions history ஆகியவை உங்கள் .git கோப்புறையில் இல்லாமல், அதன் database-ல் இருக்கும். API மூலம் issues-ஐ நகர்த்தும் கருவிகள் உள்ளன, மேலும் workflow கோப்புகளைப் புதிய host-ன் CI-க்கு ஏற்ப மாற்ற வேண்டியிருக்கும். இதை மனதில் வைத்து, ஆவணங்களை (documentation) issue threads-ல் வைப்பதற்குப் பதிலாக repository-க்குள்ளேயே வைப்பது சிறந்தது.

#github#git#version-control#ci-cd#developer-tools