542 lines
11 KiB
Markdown
542 lines
11 KiB
Markdown
# Complete Gitea Setup Guide for Beginners
|
|
|
|
## A) Initial Setup of Gitea on Computer
|
|
|
|
### 1. Install Git on Your Computer
|
|
|
|
**Windows:**
|
|
- Download Git from https://git-scm.com/download/win
|
|
- Run installer with default settings
|
|
- Open Git Bash or Command Prompt
|
|
|
|
**macOS:**
|
|
- Install via Homebrew: `brew install git`
|
|
- Or download from https://git-scm.com/download/mac
|
|
|
|
**Linux (Ubuntu/Debian):**
|
|
- Install via package manager: `sudo apt-get install git`
|
|
|
|
### 2. Verify Git Installation
|
|
```bash
|
|
git --version
|
|
```
|
|
|
|
### 3. Connect Computer to Your Existing Codebase/Folder
|
|
|
|
**Option 1: Connect Existing Local Folder to Gitea**
|
|
```bash
|
|
cd /path/to/your/existing/project
|
|
git init
|
|
git remote add origin git@your-gitea-server:username/repository-name.git
|
|
git add .
|
|
git commit -m "Initial commit"
|
|
git push -u origin main
|
|
```
|
|
|
|
**Option 2: Clone Existing Repository from Gitea**
|
|
```bash
|
|
git clone git@your-gitea-server:username/repository-name.git
|
|
cd repository-name
|
|
```
|
|
|
|
## B) Initial Configuration on New Computer
|
|
|
|
### 1. Configure Git Identity
|
|
```bash
|
|
git config --global user.name "Your Full Name"
|
|
git config --global user.email "your.email@example.com"
|
|
git config --global core.editor "nano" # or "code" for VS Code
|
|
git config --global color.ui true
|
|
```
|
|
|
|
### 2. Generate SSH Key for Secure Authentication
|
|
```bash
|
|
# Generate new SSH key
|
|
ssh-keygen -t ed25519 -C "your.email@example.com"
|
|
|
|
# Start SSH agent
|
|
eval "$(ssh-agent -s)"
|
|
|
|
# Add key to agent
|
|
ssh-add ~/.ssh/id_ed25519
|
|
|
|
# Display public key to copy to Gitea
|
|
cat ~/.ssh/id_ed25519.pub
|
|
```
|
|
|
|
### 3. Add SSH Key to Gitea Account
|
|
1. Copy the public key output from above
|
|
2. Log into Gitea web interface
|
|
3. Go to Settings > SSH/GPG Keys
|
|
4. Click "Add Key"
|
|
5. Paste public key in Content field
|
|
6. Click "Add Key"
|
|
|
|
### 4. Test SSH Connection
|
|
```bash
|
|
ssh -T git@your-gitea-server.com
|
|
```
|
|
You should see a success message.
|
|
|
|
### 5. Set Up Git Aliases (Optional but Helpful)
|
|
```bash
|
|
git config --global alias.st status
|
|
git config --global alias.co checkout
|
|
git config --global alias.br branch
|
|
git config --global alias.ci commit
|
|
git config --global alias.lg "log --oneline --graph --decorate"
|
|
```
|
|
|
|
## C) Steps to Form a New Project Each Time
|
|
|
|
### 1. Create Repository in Gitea Web Interface
|
|
1. Log into Gitea
|
|
2. Click "+" menu in top-right corner
|
|
3. Select "New Repository"
|
|
4. Fill out repository details:
|
|
- **Repository Name:** use-lowercase-with-hyphens
|
|
- **Description:** Brief project description
|
|
- **Visibility:** Public or Private
|
|
- **Initialize Repository:** Check if starting fresh
|
|
- **Add .gitignore:** Select template for your language
|
|
- **Add License:** Choose appropriate license
|
|
5. Click "Create Repository"
|
|
|
|
### 2. Clone and Set Up Locally
|
|
```bash
|
|
# Clone the new repository
|
|
git clone git@your-gitea-server:username/repository-name.git
|
|
|
|
# Navigate to project directory
|
|
cd repository-name
|
|
|
|
# Create basic project structure
|
|
mkdir src docs tests
|
|
touch src/main.py # or main.js, main.cpp, etc.
|
|
|
|
# Add initial files
|
|
git add .
|
|
git commit -m "Initial project structure"
|
|
git push origin main
|
|
```
|
|
|
|
### 3. Create Development Branch
|
|
```bash
|
|
# Create and switch to development branch
|
|
git checkout -b develop
|
|
|
|
# Push development branch to remote
|
|
git push -u origin develop
|
|
```
|
|
|
|
## D) Templates and Documents for New Setup
|
|
|
|
### 1. Essential Files Every Repository Should Have
|
|
|
|
#### README.md Template
|
|
```markdown
|
|
# Project Name
|
|
|
|
Brief description of what this project does.
|
|
|
|
## Features
|
|
- Feature 1
|
|
- Feature 2
|
|
- Feature 3
|
|
|
|
## Installation
|
|
```bash
|
|
git clone git@your-gitea-server:username/project-name.git
|
|
cd project-name
|
|
# Add installation steps
|
|
```
|
|
|
|
## Usage
|
|
```bash
|
|
# Add usage examples
|
|
```
|
|
|
|
## Configuration
|
|
Describe any configuration needed.
|
|
|
|
## Contributing
|
|
Guidelines for contributing to the project.
|
|
|
|
## License
|
|
This project is licensed under the [License Name](LICENSE) - see the LICENSE file for details.
|
|
```
|
|
|
|
#### .gitignore Template (General)
|
|
```
|
|
# Operating System Files
|
|
.DS_Store
|
|
.DS_Store?
|
|
._*
|
|
.Spotlight-V100
|
|
.Trashes
|
|
ehthumbs.db
|
|
Thumbs.db
|
|
|
|
# Editor Files
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
|
|
# Log Files
|
|
*.log
|
|
logs/
|
|
|
|
# Environment Files
|
|
.env
|
|
.env.local
|
|
.env.production
|
|
*.secret
|
|
|
|
# Temporary Files
|
|
*.tmp
|
|
*.temp
|
|
temp/
|
|
tmp/
|
|
|
|
# Build Files
|
|
dist/
|
|
build/
|
|
*.o
|
|
*.exe
|
|
```
|
|
|
|
#### LICENSE Template (MIT)
|
|
```
|
|
MIT License
|
|
|
|
Copyright (c) [year] [fullname]
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
```
|
|
|
|
#### CHANGELOG.md Template
|
|
```markdown
|
|
# Changelog
|
|
|
|
All notable changes to this project will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [Unreleased]
|
|
|
|
### Added
|
|
- New features
|
|
|
|
### Changed
|
|
- Changes in existing functionality
|
|
|
|
### Deprecated
|
|
- Soon-to-be removed features
|
|
|
|
### Removed
|
|
- Removed features
|
|
|
|
### Fixed
|
|
- Bug fixes
|
|
|
|
### Security
|
|
- Security improvements
|
|
|
|
## [1.0.0] - 2024-01-01
|
|
### Added
|
|
- Initial release
|
|
```
|
|
|
|
### 2. Gitea-Specific Templates
|
|
|
|
#### Issue Template (.gitea/ISSUE_TEMPLATE.md)
|
|
```markdown
|
|
## Bug Description
|
|
A clear and concise description of what the bug is.
|
|
|
|
## Steps to Reproduce
|
|
1. Go to '...'
|
|
2. Click on '....'
|
|
3. Scroll down to '....'
|
|
4. See error
|
|
|
|
## Expected Behavior
|
|
A clear and concise description of what you expected to happen.
|
|
|
|
## Screenshots
|
|
If applicable, add screenshots to help explain your problem.
|
|
|
|
## Environment
|
|
- OS: [e.g. Windows 10, macOS 12, Ubuntu 20.04]
|
|
- Version: [e.g. 1.2.3]
|
|
- Browser: [e.g. Chrome 96, Firefox 95]
|
|
|
|
## Additional Context
|
|
Add any other context about the problem here.
|
|
```
|
|
|
|
#### Pull Request Template (.gitea/PULL_REQUEST_TEMPLATE.md)
|
|
```markdown
|
|
## Description
|
|
Brief description of changes made.
|
|
|
|
## Type of Change
|
|
- [ ] Bug fix
|
|
- [ ] New feature
|
|
- [ ] Documentation update
|
|
- [ ] Performance improvement
|
|
- [ ] Code refactoring
|
|
|
|
## Testing
|
|
- [ ] I have tested this change locally
|
|
- [ ] I have added/updated tests as needed
|
|
- [ ] All existing tests pass
|
|
|
|
## Checklist
|
|
- [ ] My code follows the project's style guidelines
|
|
- [ ] I have performed a self-review of my own code
|
|
- [ ] I have commented my code, particularly in hard-to-understand areas
|
|
- [ ] I have made corresponding changes to the documentation
|
|
- [ ] My changes generate no new warnings
|
|
```
|
|
|
|
## E) Very Detailed Daily Coding Workflow
|
|
|
|
### 1. Start of Each Work Session
|
|
```bash
|
|
# Check current status
|
|
git status
|
|
|
|
# Get latest changes from remote
|
|
git pull origin main
|
|
|
|
# Create new feature branch (use descriptive names)
|
|
git checkout -b feature/add-user-authentication
|
|
# or
|
|
git checkout -b bugfix/fix-login-error
|
|
# or
|
|
git checkout -b docs/update-readme
|
|
```
|
|
|
|
### 2. During Development
|
|
|
|
#### Making Changes
|
|
```bash
|
|
# Check what files have changed
|
|
git status
|
|
|
|
# See specific changes in files
|
|
git diff
|
|
|
|
# See changes for specific file
|
|
git diff filename.py
|
|
```
|
|
|
|
#### Staging and Committing Changes
|
|
```bash
|
|
# Stage specific files
|
|
git add src/auth.py src/login.py
|
|
|
|
# Or stage all changes
|
|
git add .
|
|
|
|
# Or stage all changes in current directory
|
|
git add -A
|
|
|
|
# Check what's staged
|
|
git status
|
|
|
|
# Commit with descriptive message
|
|
git commit -m "Add user authentication with email verification"
|
|
|
|
# Or commit with detailed message
|
|
git commit -m "Add user authentication system
|
|
|
|
- Implement email-based user registration
|
|
- Add password hashing with bcrypt
|
|
- Create login/logout functionality
|
|
- Add session management
|
|
- Include email verification workflow
|
|
|
|
Fixes #123"
|
|
```
|
|
|
|
#### Best Practices for Commit Messages
|
|
- Use present tense imperative mood ("Add feature" not "Added feature")
|
|
- Keep first line under 50 characters
|
|
- Add blank line before detailed description
|
|
- Reference issue numbers when applicable
|
|
- Use conventional commit format:
|
|
- `feat:` for new features
|
|
- `fix:` for bug fixes
|
|
- `docs:` for documentation
|
|
- `style:` for formatting changes
|
|
- `refactor:` for code refactoring
|
|
- `test:` for adding tests
|
|
|
|
#### Pushing Changes
|
|
```bash
|
|
# Push current branch to remote
|
|
git push origin feature/add-user-authentication
|
|
|
|
# If first time pushing this branch
|
|
git push -u origin feature/add-user-authentication
|
|
```
|
|
|
|
### 3. Checking Progress and History
|
|
```bash
|
|
# View commit history
|
|
git log --oneline
|
|
|
|
# View detailed history
|
|
git log --graph --decorate --oneline
|
|
|
|
# View changes between commits
|
|
git log -p
|
|
|
|
# View specific file history
|
|
git log --follow filename.py
|
|
|
|
# View who changed what in a file
|
|
git blame filename.py
|
|
```
|
|
|
|
### 4. Handling Merge Conflicts
|
|
```bash
|
|
# If pull/merge results in conflicts
|
|
git status # Shows conflicted files
|
|
|
|
# Edit conflicted files manually, looking for:
|
|
# <<<<<<< HEAD
|
|
# Your changes
|
|
# =======
|
|
# Their changes
|
|
# >>>>>>> branch-name
|
|
|
|
# After resolving conflicts
|
|
git add conflicted-file.py
|
|
git commit -m "Resolve merge conflict in user authentication"
|
|
```
|
|
|
|
### 5. End of Feature Development
|
|
```bash
|
|
# Switch back to main branch
|
|
git checkout main
|
|
|
|
# Get latest changes
|
|
git pull origin main
|
|
|
|
# Merge feature branch
|
|
git merge feature/add-user-authentication
|
|
|
|
# Push merged changes
|
|
git push origin main
|
|
|
|
# Delete feature branch locally
|
|
git branch -d feature/add-user-authentication
|
|
|
|
# Delete feature branch on remote
|
|
git push origin --delete feature/add-user-authentication
|
|
```
|
|
|
|
### 6. Daily Maintenance Commands
|
|
```bash
|
|
# See all branches (local and remote)
|
|
git branch -a
|
|
|
|
# See remote repositories
|
|
git remote -v
|
|
|
|
# Clean up remote tracking branches
|
|
git remote prune origin
|
|
|
|
# See repository status
|
|
git status
|
|
|
|
# See what's different from last commit
|
|
git diff HEAD~1
|
|
|
|
# Undo last commit (but keep changes)
|
|
git reset --soft HEAD~1
|
|
|
|
# Undo changes to a file
|
|
git checkout -- filename.py
|
|
|
|
# Create and apply patches
|
|
git format-patch -1 HEAD
|
|
git apply patch-file.patch
|
|
```
|
|
|
|
### 7. Working with Multiple Remotes
|
|
```bash
|
|
# Add additional remote (e.g., for backup)
|
|
git remote add backup git@backup-server:username/repository.git
|
|
|
|
# Push to specific remote
|
|
git push backup main
|
|
|
|
# Pull from specific remote
|
|
git pull backup main
|
|
```
|
|
|
|
### 8. Stashing Work in Progress
|
|
```bash
|
|
# Save current work without committing
|
|
git stash push -m "Work in progress on authentication"
|
|
|
|
# List stashes
|
|
git stash list
|
|
|
|
# Apply most recent stash
|
|
git stash pop
|
|
|
|
# Apply specific stash
|
|
git stash apply stash@{1}
|
|
|
|
# Drop a stash
|
|
git stash drop stash@{1}
|
|
```
|
|
|
|
### 9. Emergency Procedures
|
|
|
|
#### Undo Last Commit
|
|
```bash
|
|
# Undo last commit but keep changes
|
|
git reset --soft HEAD~1
|
|
|
|
# Undo last commit and lose changes
|
|
git reset --hard HEAD~1
|
|
```
|
|
|
|
#### Recovery
|
|
```bash
|
|
# Find lost commits
|
|
git reflog
|
|
|
|
# Recover specific commit
|
|
git checkout commit-hash
|
|
|
|
# Create branch from recovered commit
|
|
git checkout -b recovery-branch
|
|
```
|
|
|
|
This comprehensive guide provides everything needed to effectively use Git with Gitea for personal coding projects. |