GitHub 잔디 심기 꼼수

MJ·2025년 7월 29일

GitHub 잔디심기를 까먹었다면

개발자들 사이에서 유명한 GitHub 잔디 심기 프로필에 초록색 잔디밭을 만들어보는 방법을 정리해보았습니다.

잔디가 심어지는 조건

GitHub에서 잔디가 심어지려면 몇 가지 조건이 있습니다:

  1. GitHub 계정과 커밋 이메일이 동일해야 함
  2. 본인 소유의 레포지토리에서 커밋해야 함
  3. 기본 브랜치(main/master)에 커밋해야 함
  4. Fork한 레포가 아닌 원본 레포여야 함

과거 날짜로 잔디 심기

이미 지나간 날짜에도 잔디를 심을 수 있습니다! Git의 환경변수를 활용하는 방법입니다.

기본 방법

# 특정 날짜에 커밋 생성
GIT_AUTHOR_DATE=2024-01-01T12:00:00 GIT_COMMITTER_DATE=2024-01-01T12:00:00 \
git commit --allow-empty -m "past commit"

# 여러 날짜에 커밋
GIT_AUTHOR_DATE=2024-01-15T12:00:00 GIT_COMMITTER_DATE=2024-01-15T12:00:00 \
git commit --allow-empty -m "commit 1"

GIT_AUTHOR_DATE=2024-02-01T12:00:00 GIT_COMMITTER_DATE=2024-02-01T12:00:00 \
git commit --allow-empty -m "commit 2"

--date 옵션 사용

# 더 간단한 방법
git commit --allow-empty -m "past commit" --date="2024-01-01"
git commit --allow-empty -m "past commit" --date="2024-01-01T12:00:00"

자동화 스크립트

매번 수동으로 하기 힘드니까 자동화 스크립트를 만들어보았습니다.

전체 기간 잔디 심기 스크립트

#!/bin/bash

echo "GitHub grass planting started (Jan 1, 2024 ~ Jul 29, 2025)"
echo "=================================================="

# 2024년 심기 (1월 1일 ~ 12월 31일)
echo "Processing 2024..."
for month in {1..12}
do
    # 각 월의 마지막 날 계산
    case $month in
        1|3|5|7|8|10|12) days=31 ;;
        4|6|9|11) days=30 ;;
        2) days=29 ;; # 2024년은 윤년
    esac
    
    for day in $(seq 1 $days)
    do
        date="2024-$(printf "%02d" $month)-$(printf "%02d" $day)"
        
        # 랜덤하게 70% 확률로 커밋 (너무 빽빽하지 않게)
        if [ $((RANDOM % 10)) -lt 7 ]; then
            # 랜덤 커밋 개수 (1-5개)
            commits=$((RANDOM % 5 + 1))
            
            for i in $(seq 1 $commits)
            do
                hour=$((RANDOM % 24))
                minute=$((RANDOM % 60))
                time="${date}T$(printf "%02d" $hour):$(printf "%02d" $minute):00"
                
                GIT_AUTHOR_DATE="$time" GIT_COMMITTER_DATE="$time" \
                git commit --allow-empty -m "Auto commit $date #$i"
            done
            
            echo "Done: $date - $commits commits"
        else
            echo "Skip: $date - rest day"
        fi
    done
done

# 2025년 심기 (1월 1일 ~ 7월 29일)
echo "Processing 2025..."
for month in {1..7}
do
    # 각 월의 마지막 날 계산 (7월은 29일까지만)
    case $month in
        1|3|5|7) 
            if [ $month -eq 7 ]; then
                days=29  # 7월은 29일까지만
            else
                days=31
            fi
            ;;
        4|6) days=30 ;;
        2) days=28 ;; # 2025년은 평년
    esac
    
    for day in $(seq 1 $days)
    do
        date="2025-$(printf "%02d" $month)-$(printf "%02d" $day)"
        
        # 랜덤하게 70% 확률로 커밋
        if [ $((RANDOM % 10)) -lt 7 ]; then
            # 랜덤 커밋 개수 (1-5개)
            commits=$((RANDOM % 5 + 1))
            
            for i in $(seq 1 $commits)
            do
                hour=$((RANDOM % 24))
                minute=$((RANDOM % 60))
                time="${date}T$(printf "%02d" $hour):$(printf "%02d" $minute):00"
                
                GIT_AUTHOR_DATE="$time" GIT_COMMITTER_DATE="$time" \
                git commit --allow-empty -m "Auto commit $date #$i"
            done
            
            echo "Done: $date - $commits commits"
        else
            echo "Skip: $date - rest day"
        fi
    done
done

echo "=================================================="
echo "Grass planting completed!"
echo "Now run 'git push' to upload to GitHub!"
echo ""
echo "Check total commits:"
echo "git log --oneline | wc -l"
echo ""
echo "Check recent commits:"
echo "git log --oneline -10"

사용 방법

1. 스크립트 파일 생성

nano grass_planter.sh
# 위 스크립트 내용 복사해서 붙여넣기

2. 실행 권한 부여

chmod +x grass_planter.sh

3. GitHub 프로필 레포지토리로 이동

cd your-username  # 본인의 GitHub 프로필 레포지토리

4. 스크립트 실행

./grass_planter.sh

5. GitHub에 푸시

git push

주의사항

  1. 백업 필수: 실행하기 전에 현재 레포지토리를 백업해두세요
  2. 테스트 먼저: 테스트용 레포지토리에서 먼저 해보는 것을 추천
  3. 대량 커밋: 수백 개의 커밋이 생성됩니다
  4. 자연스럽게: 너무 완벽한 패턴보다는 적당한 빈 날이 있는 게 자연스러워요

커스터마이징

커밋 확률 조정

# 70% 확률 (기본값)
if [ $((RANDOM % 10)) -lt 7 ]; then

# 50% 확률로 변경
if [ $((RANDOM % 10)) -lt 5 ]; then

# 30% 확률로 변경
if [ $((RANDOM % 10)) -lt 3 ]; then

커밋 개수 조정

# 1-5개 커밋 (기본값)
commits=$((RANDOM % 5 + 1))

# 1-3개 커밋으로 변경
commits=$((RANDOM % 3 + 1))

# 고정 1개 커밋
commits=1

추가 팁

현재 잔디 상태 확인

# 총 커밋 수 확인
git log --oneline | wc -l

# 최근 커밋 10개 확인
git log --oneline -10

# 특정 기간 커밋 확인
git log --since="2024-01-01" --until="2024-12-31" --oneline

커밋 메시지 패턴 변경

더 자연스러운 커밋 메시지를 원한다면:

# 랜덤 메시지 배열
messages=("update docs" "fix bug" "add feature" "refactor code" "update readme")
msg=${messages[$((RANDOM % ${#messages[@]}))]}

git commit --allow-empty -m "$msg"

해보면서 느낀 것: 사실 이렇게 꼼수를 써서 하는 것 보단 직접 매일 1일 1커밋 첼린지 하는게 더 배우는 점이 많은 것 같아요

profile
..

0개의 댓글