분석 결과가 담긴 대용량 CSV 파일의 변경 사항을 merge 하려 하나, 텍스트 충돌이 발생하여 파일이 손상되었습니다.
코드:
# 상황 재현
git checkout -b feature/analysis_v1
echo "id,value\n1,10" > result.csv
git add result.csv
git commit -m "Initial result"
git checkout main
echo "id,value\n1,20" > result.csv
git add result.csv
git commit -m "Update result in main"
git checkout feature/analysis_v1
git merge main
시도: `git merge -X ours`를 사용하여 특정 브랜치 내용을 우선시했으나, 파일 크기가 커질수록 merge 과정에서 메모리 부하 및 인덱싱 지연이 발생함.
질문: 분석 결과 파일처럼 내용 수정이 빈번하고 크기가 큰 CSV 파일을 Git에서 텍스트가 아닌 바이너리 파일로 취급하여, 충돌 시 자동으로 한 쪽 버전을 선택(keep)하게 설정하는 `.gitattributes` 설정법이 무엇입니까?
댓글11
-
빗방울
2026.10.30 13:51
-
빗방울
2026.10.30 14:15
`.gitattributes`에 `merge=ours` 전략 설정해두면 충돌 났을 때 그냥 내 거로 덮어씌우기 편할 것 같은데 한번 찾아보셈ㅋㅋ
-
빗방울
2026.10.30 17:57
오 그것도 방법이겠네요ㅋㅋ
근데 그것도 결국 설정 제대로 안 하면 꼬일 수도 있을 듯ㄷㄷ
일단 한번 시도해보시는 게 빠를 것 같아요ㅋㅋ
-
빗방울
2026.10.30 14:54
아니 근데 애초에 분석 결과 파일은 깃에 올리면 안 되는 거 아님?ㅋㅋ
그냥 S3나 공유 드라이브로 빼는 게
제일 깔끔할 듯ㄷㄷ
-
빗방울
2026.10.30 15:43
그냥 .gitattributes에 `*.csv merge=binary` 설정하면 텍스트 비교 안 하고 바이너리로 처리해서 충돌 날 때 선택하라고 뜰걸요?
근데 파일 너무 크면 merge 자체가 뻗을 수도 있어서 조심해야 할 듯ㅋㅋ
-
빗방울
2026.10.30 16:59
맞아요ㅋㅋ
진짜 파일 크면 깃 자체가 버벅거려서 답 없더라고요ㄷㄷ
그냥 맘 편하게 LFS나 DVC 쓰는 게 답인 듯요
-
빗방울
2026.10.30 15:44
`.gitattributes`에 `*.csv merge=binary` 넣어도 결국 충돌 나면 수동으로 골라야 할 텐데
차라리 `git checkout --ours result.csv`로 밀어버리는 게
제일 빠를 것 같네요ㅋㅋ
-
빗방울
2026.10.30 15:45
근본적으로는 .gitattributes에 `*.csv merge=binary` 설정하고
git config merge.binary.driver "cat %O > %A" 이런 식으로 드라이버 따로 지정해주면
충돌 났을 때 자동으로 한쪽 버전 선택하게 만들 수 있을 듯요ㅋㅋ
-
빗방울
2026.10.30 17:48
오 드라이버 지정하는 방법까지 생각하셨네요ㅋㅋ
이렇게 하면 일일이 체크아웃 안 해도 돼서 훨씬 편할 듯요ㄷㄷ
근데 이거 설정해도 파일 너무 크면 인덱싱 하다가 멈출 수도 있을 것 같긴 함ㅋㅋ
-
빗방울
2026.10.30 18:06
오 드라이버 설정까지 하면 진짜 자동이겠네요ㅋㅋ 근데 이것도 파일 너무 크면 깃이 비명 지를 것 같긴 한데 일단 시도해볼 만한 듯요ㄷㄷ
-
빗방울
2026.10.30 16:38
그냥 .gitignore에 넣고 관리하는 게 제일 속 편할 것 같은데ㅋㅋ
정 올리고 싶으면 데이터 버전 관리 툴인 DVC 같은 거 알아보셈ㄷㄷ
그게 훨씬 체계적일 듯요
모든 이야기1454
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
.gitattributes에 `*.csv binary` 추가하고
`merge=binary` 설정하면 될 것 같은데
대용량이면 그냥 LFS 쓰는 게 정신건강에 이롭겠네요 ㅋㅋ