3.1 Лабораторийн зорилго
Энэ лабораторид та Git-ийн бодит ашиглалтыг дадлагаар эзэмшинэ:
- Git репозитор үүсгэх, commit хийх
- Branch үүсгэж, feature хөгжүүлэх
- Merge conflict шийдвэрлэх
- GitHub дээр хамтран ажиллах (PR)
Шаардлагатай зүйлс: Git суулгасан, терминал/командын мөр, GitHub бүртгэл
3.2 Лаб 1: Git-ийн суурь — Репозитор үүсгэх ба commit хийх
Алхам 1: Git тохиргоо (нэг удаа)
# Нэр болон имэйл тохируулах
git config --global user.name "Баатар"
git config --global user.email "baatar@example.com"
# Тохиргоог шалгах
git config --list
Алхам 2: Репозитор үүсгэх
# Шинэ хавтас үүсгэх
mkdir student-management
cd student-management
# Git репозитор эхлүүлэх
git init
# Төлөв шалгах
git status
Үр дүн: Initialized empty Git repository in .../student-management/.git/
Алхам 3: Эхний файл үүсгэж commit хийх
# Java файл үүсгэх
cat > Student.java << 'EOF'
public class Student {
private String name;
private int age;
private double gpa;
public Student(String name, int age, double gpa) {
this.name = name;
this.age = age;
this.gpa = gpa;
}
public String getName() { return name; }
public int getAge() { return age; }
public double getGpa() { return gpa; }
@Override
public String toString() {
return name + " (Нас: " + age + ", GPA: " + gpa + ")";
}
}
EOF
# Төлөв шалгах — Student.java "untracked" байна
git status
# Staging area-д нэмэх
git add Student.java
# Төлөв шалгах — Student.java "staged" байна
git status
# Commit хийх
git commit -m "feat(student): Student класс үүсгэсэн"
Алхам 4: Өөрчлөлт хийж дахин commit хийх
# Main класс үүсгэх
cat > Main.java << 'EOF'
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Бат", 20, 3.5));
students.add(new Student("Болд", 21, 3.8));
students.add(new Student("Сарнай", 19, 3.9));
System.out.println("=== Оюутнууд ===");
for (Student s : students) {
System.out.println(s);
}
}
}
EOF
# .gitignore файл үүсгэх
cat > .gitignore << 'EOF'
*.class
*.jar
/out/
.idea/
EOF
# Бүгдийг staging-д нэмж commit хийх
git add .
git commit -m "feat(main): Main класс ба .gitignore нэмсэн"
# Түүх харах
git log --oneline
Хүлээгдэх үр дүн:
a1b2c3d feat(main): Main класс ба .gitignore нэмсэн
e4f5g6h feat(student): Student класс үүсгэсэн
3.3 Лаб 2: Branch ашиглах — Feature хөгжүүлэлт
Алхам 1: Feature branch үүсгэх
# Шинэ branch үүсгэж шилжих
git checkout -b feature/grade-calculator
# Одоогийн branch шалгах
git branch
Алхам 2: Feature branch дээр код бичих
cat > GradeCalculator.java << 'EOF'
public class GradeCalculator {
public static String calculateGrade(double gpa) {
if (gpa >= 3.7) return "A";
if (gpa >= 3.3) return "A-";
if (gpa >= 3.0) return "B+";
if (gpa >= 2.7) return "B";
if (gpa >= 2.3) return "B-";
if (gpa >= 2.0) return "C+";
return "F";
}
public static boolean isPassing(double gpa) {
return gpa >= 2.0;
}
}
EOF
git add GradeCalculator.java
git commit -m "feat(grade): GradeCalculator класс нэмсэн"
Алхам 3: Main.java-д GradeCalculator ашиглах
cat > Main.java << 'EOF'
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Бат", 20, 3.5));
students.add(new Student("Болд", 21, 3.8));
students.add(new Student("Сарнай", 19, 3.9));
System.out.println("=== Оюутны тайлан ===");
for (Student s : students) {
String grade = GradeCalculator.calculateGrade(s.getGpa());
boolean passed = GradeCalculator.isPassing(s.getGpa());
System.out.println(s + " | Дүн: " + grade +
" | Тэнцсэн: " + (passed ? "Тийм" : "Үгүй"));
}
}
}
EOF
git add Main.java
git commit -m "feat(main): GradeCalculator-ийг Main-д холбосон"
Алхам 4: main руу merge хийх
# main branch руу шилжих
git checkout main
# Feature branch-ийг merge хийх
git merge feature/grade-calculator
# Түүх харах
git log --oneline --graph
# Feature branch устгах (merge хийсний дараа)
git branch -d feature/grade-calculator
3.4 Лаб 3: Merge Conflict шийдвэрлэх
Алхам 1: Хоёр branch дээр ижил файлыг өөрөөр засах
# Branch A үүсгэх
git checkout -b feature/greeting-mn
# Main.java-ийн мэндчилгээг Монголоор засах
cat > Greeting.java << 'EOF'
public class Greeting {
public static String getGreeting() {
return "Сайн байна уу! Тавтай морил!";
}
}
EOF
git add Greeting.java
git commit -m "feat(greeting): Монгол мэндчилгээ нэмсэн"
# main руу буцаж, Branch B үүсгэх
git checkout main
git checkout -b feature/greeting-en
# Ижил файлыг Англиар бичих
cat > Greeting.java << 'EOF'
public class Greeting {
public static String getGreeting() {
return "Hello! Welcome!";
}
}
EOF
git add Greeting.java
git commit -m "feat(greeting): English greeting нэмсэн"
Алхам 2: Эхний branch-ийг merge хийх (амжилттай)
git checkout main
git merge feature/greeting-mn
# Амжилттай — Greeting.java шинээр нэмэгдэнэ
Алхам 3: Хоёр дахь branch-ийг merge хийх → CONFLICT!
git merge feature/greeting-en
# CONFLICT! Greeting.java файлд зөрчил гарна
Git-ийн мэдэгдэл:
Auto-merging Greeting.java
CONFLICT (content): Merge conflict in Greeting.java
Automatic merge failed; fix conflicts and then commit the result.
Алхам 4: Conflict шийдвэрлэх
# Conflict-той файлыг нээх
cat Greeting.java
Файлын агуулга:
public class Greeting {
public static String getGreeting() {
<<<<<<< HEAD
return "Сайн байна уу! Тавтай морил!";
=======
return "Hello! Welcome!";
>>>>>>> feature/greeting-en
}
}
Шийдвэрлэх — Хоёуланг нь ашиглах:
cat > Greeting.java << 'EOF'
public class Greeting {
public static String getGreeting(String language) {
if ("mn".equals(language)) {
return "Сайн байна уу! Тавтай морил!";
}
return "Hello! Welcome!";
}
}
EOF
# Conflict шийдвэрлэсэн файлыг нэмж commit хийх
git add Greeting.java
git commit -m "fix(greeting): merge conflict шийдвэрлэсэн — хоёр хэл дэмжсэн"
# Branch-уудыг цэвэрлэх
git branch -d feature/greeting-mn
git branch -d feature/greeting-en
# Түүх харах
git log --oneline --graph
3.5 Лаб 4: GitHub дээр ажиллах — Remote ба Pull Request
Алхам 1: GitHub дээр репозитор үүсгэх
- GitHub.com руу нэвтрэх
- New repository товч дарах
- Нэр:
student-management - Create repository дарах
Алхам 2: Локал репозиторыг GitHub-тай холбох
# Remote нэмэх
git remote add origin https://github.com/USERNAME/student-management.git
# Remote шалгах
git remote -v
# Код push хийх
git push -u origin main
Алхам 3: Feature branch үүсгэж push хийх
# Шинэ feature branch
git checkout -b feature/search
# Хайлтын функц нэмэх
cat > StudentSearch.java << 'EOF'
import java.util.List;
import java.util.stream.Collectors;
public class StudentSearch {
public static List<Student> searchByName(List<Student> students, String keyword) {
return students.stream()
.filter(s -> s.getName().toLowerCase().contains(keyword.toLowerCase()))
.collect(Collectors.toList());
}
public static List<Student> filterByGPA(List<Student> students, double minGPA) {
return students.stream()
.filter(s -> s.getGpa() >= minGPA)
.collect(Collectors.toList());
}
}
EOF
git add StudentSearch.java
git commit -m "feat(search): оюутны хайлт, шүүлтүүр нэмсэн"
# Feature branch-ийг GitHub руу push
git push origin feature/search
Алхам 4: GitHub дээр Pull Request үүсгэх
- GitHub дээр репозитор руу очих
- "Compare & pull request" товч дарах
- PR тайлбар бичих:
## Юу хийсэн - Оюутны нэрээр хайх функц нэмсэн - GPA-аар шүүх функц нэмсэн ## Тест - searchByName("Бат") → Бат олдоно - filterByGPA(3.5) → GPA >= 3.5 оюутнууд - Create pull request дарах
- Code Review хийлгэсний дараа Merge дарах
Алхам 5: Merge хийсний дараа локал дээр шинэчлэх
# main руу шилжих
git checkout main
# GitHub-аас pull хийх
git pull origin main
# Feature branch устгах
git branch -d feature/search
git push origin --delete feature/search
Git stash хэрэглээ (нэмэлт):
# Дуусаагүй ажлыг түр хадгалах
git stash
# Бусад ажил хийх...
git checkout main
git pull origin main
# Буцаж ирж, түр хадгалсан ажлыг сэргээх
git checkout feature/my-feature
git stash pop