project created
This commit is contained in:
+26
@@ -0,0 +1,26 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/.idea/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Environment-dependent path to Maven home directory
|
||||||
|
/mavenHomeManager.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
/target
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
# Compiled Maven output
|
||||||
|
/target/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# IntelliJ IDEA project files
|
||||||
|
*.iws
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
# Compiled class files
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
@@ -1,2 +1,144 @@
|
|||||||
# Advanced-git
|
|
||||||
This repo is a workshop assignment to practice conflict resolvation in git
|
# 🚀 WS 11 - Advanced Git & Github
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📖 Overview
|
||||||
|
In this assignment, you will simulate multiple developers working on the same project using different Git branches.
|
||||||
|
You will create parallel development scenarios, encounter merge conflicts, and practice resolving them using Git. By the end, you should feel confident handling common conflict situations that occur in real-world software development.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
- Git installed
|
||||||
|
- A GitHub account
|
||||||
|
- Java SDK 25
|
||||||
|
- Maven
|
||||||
|
---
|
||||||
|
## 🎯 Objectives
|
||||||
|
By completing this assignment, you will:
|
||||||
|
- Become comfortable creating and switching between Git branches
|
||||||
|
- Learn how to resolve same-line content conflicts
|
||||||
|
- Practice resolving:
|
||||||
|
- Modify/modify conflicts
|
||||||
|
- Modify/delete conflicts
|
||||||
|
- Rename conflicts
|
||||||
|
- Understand how Git tracks file changes across branches
|
||||||
|
|
||||||
|
---
|
||||||
|
## Project Structure
|
||||||
|
- **Calculator.java:** Interface which defines calculator methods
|
||||||
|
- **BasicCalculator.java:** Implements Calculator with basic arithmetic
|
||||||
|
- **MathHelper.java:** Static utility methods (multiply, square, max)
|
||||||
|
- **ReportGenerator.java:** Uses Calculator and MathHelper to produce formatted output
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Task 1 – Refactoring Conflict
|
||||||
|
|
||||||
|
### Scenario:
|
||||||
|
Two developers are working in parallel:<br>
|
||||||
|
- Developer A refactors the code by renaming a method.
|
||||||
|
- Developer B continues developing a new feature using the old method name.
|
||||||
|
|
||||||
|
When their work is merged, a conflict will occur.
|
||||||
|
|
||||||
|
1. First fork & clone the repository and create develop branch:
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/<your-username>/conflict-demo.git
|
||||||
|
git checkout -b develop
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create two feature branches(feature/refactor-multiply & feature/change-multiply). we will assume they are 2 separate developers working on project. One of them will refactor project by renaming a method across whole project, while other developer is still working with old name.
|
||||||
|
```
|
||||||
|
git checkout develop
|
||||||
|
git checkout -b feature/refactor-multiply
|
||||||
|
git checkout develop
|
||||||
|
git checkout -b feature/change-multiply
|
||||||
|
```
|
||||||
|
|
||||||
|
3. From feature/refactor-multiply branch, rename "multiply" method to "product" everywhere.
|
||||||
|
```
|
||||||
|
git checkout feature/refactor-multiply
|
||||||
|
# TODO: rename method "multiply" to "product" in Calculator, BasicCalculator, MathHelper and ReportGenerator
|
||||||
|
git add .
|
||||||
|
git commit -m "refactor: renamed multiply to product"
|
||||||
|
git checkout develop
|
||||||
|
git merge feature/refactor-multiply
|
||||||
|
```
|
||||||
|
|
||||||
|
4. From feature/change-multiply branch, change the body of multiply method
|
||||||
|
```
|
||||||
|
git checkout feature/change-multiply
|
||||||
|
# TODO: change the body of MathHelper.multiply (e.g., loop-based multiplication)
|
||||||
|
git add .
|
||||||
|
git commit -m "multiply method body changed"
|
||||||
|
git checkout develop
|
||||||
|
git merge feature/change-multiply # CONFLICT
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Resolve the conflict
|
||||||
|
```
|
||||||
|
# TODO: Open conflicted file(s), decide to keep the `product` name, and apply the new logic.
|
||||||
|
git add .
|
||||||
|
git commit -m "conflict resolved: keep rename, apply new multiply logic"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Task 2 – Deletion Conflict
|
||||||
|
|
||||||
|
### Scenario
|
||||||
|
|
||||||
|
Two developers are working on the same interface:
|
||||||
|
|
||||||
|
- Developer A decides that the `Calculator` interface is no longer needed and deletes it from the project.
|
||||||
|
- Developer B is still working on the interface and adds a new method to it.
|
||||||
|
|
||||||
|
When the branches are merged, Git will detect a **modify/delete conflict** because one branch deleted the file while the other modified it.
|
||||||
|
|
||||||
|
1. Create Two branches called feature/remove-calculator and feature/add-method-to-interface. We will delete interface file in project in first branch, while second one is working on it. Then we will solve conflict that happends in merging.
|
||||||
|
```
|
||||||
|
git checkout develop
|
||||||
|
git checkout -b feature/remove-calculator
|
||||||
|
git checkout develop
|
||||||
|
git checkout -b feature/add-method-to-interface
|
||||||
|
```
|
||||||
|
|
||||||
|
2. From feature/remove-calculator branch, delete interface file completely:
|
||||||
|
```
|
||||||
|
git checkout feature/remove-calculator
|
||||||
|
git rm src/main/java/com/ap/Calculator.java
|
||||||
|
git commit -m "remove Calculator interface"
|
||||||
|
git checkout develop
|
||||||
|
git merge feature/remove-calculator
|
||||||
|
```
|
||||||
|
|
||||||
|
3. From feature/add-method-to-interface add method to deleted interface
|
||||||
|
```
|
||||||
|
git checkout feature/add-method-to-interface
|
||||||
|
# TODO: add "double calculateArea(double,double)" to Calculator, implement in BasicCalculator
|
||||||
|
git add .
|
||||||
|
git commit -m "add calculateArea() method"
|
||||||
|
git checkout develop
|
||||||
|
git merge feature/add-method-to-interface # CONFLICT
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Resolve
|
||||||
|
- Keep the `Calculator` interface.
|
||||||
|
- Restore the deleted file.
|
||||||
|
- Add the new `calculateArea()` method to the interface.
|
||||||
|
```
|
||||||
|
git add .
|
||||||
|
git commit -m "resolved: Restored deleted interface and added calculateArea "
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📤 Deliverable
|
||||||
|
- Push your branches with all merge commits. <br>
|
||||||
|
- Show output of your git history:
|
||||||
|
```
|
||||||
|
git log --oneline --graph --all --decorate
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.ap</groupId>
|
||||||
|
<artifactId>Advanced-git</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>25</maven.compiler.source>
|
||||||
|
<maven.compiler.target>25</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter</artifactId>
|
||||||
|
<version>5.12.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.ap;
|
||||||
|
|
||||||
|
public class BasicCalculator implements Calculator {
|
||||||
|
@Override
|
||||||
|
public int add(int a, int b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int subtract(int a, int b) {
|
||||||
|
return a - b;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int multiply(int a, int b) {
|
||||||
|
return a * b;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.ap;
|
||||||
|
|
||||||
|
public interface Calculator {
|
||||||
|
int add(int a, int b);
|
||||||
|
int subtract(int a, int b);
|
||||||
|
int multiply(int a, int b);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.ap;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ReportGenerator generator = new ReportGenerator();
|
||||||
|
generator.generate(5, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.ap;
|
||||||
|
|
||||||
|
public class MathHelper {
|
||||||
|
public static int multiply(int a, int b) {
|
||||||
|
return a * b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int square(int x) {
|
||||||
|
return x * x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int max(int a, int b) {
|
||||||
|
return a > b ? a : b;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.ap;
|
||||||
|
|
||||||
|
public class ReportGenerator {
|
||||||
|
public void generate(int x, int y) {
|
||||||
|
Calculator calc = new BasicCalculator();
|
||||||
|
int sum = calc.add(x, y);
|
||||||
|
int diff = calc.subtract(x, y);
|
||||||
|
int product = calc.multiply(x, y);
|
||||||
|
int max = MathHelper.max(x, y);
|
||||||
|
System.out.println("Sum: " + sum + ", Diff: " + diff +
|
||||||
|
", Product: " + product + ", Max: " + max);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
import com.ap.BasicCalculator;
|
||||||
|
import com.ap.Calculator;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
|
||||||
|
public class CalculatorTest {
|
||||||
|
@Test
|
||||||
|
void testAdd() {
|
||||||
|
Calculator calc = new BasicCalculator();
|
||||||
|
assertEquals(5, calc.add(2, 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSubtract() {
|
||||||
|
Calculator calc = new BasicCalculator();
|
||||||
|
assertEquals(2, calc.subtract(5, 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testMultiply() {
|
||||||
|
Calculator calc = new BasicCalculator();
|
||||||
|
assertEquals(6, calc.multiply(2, 3));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user