누구든지 파일 수와 파일 크기에 대한 Git 제한이 무엇인지 알고 있습니까?
답변
Linus가 보낸 이 메시지는 다른 한계를 가지고 당신을 도울 수 있습니다
[…] CVS, 즉 “한 번에 하나의 파일”모델을 지향합니다.
백만 개의 파일을 가질 수 있으며 그중 몇 개만 체크 아웃 하면 다른 999,995 파일의 영향을 볼 수 없습니다 .
힘내는 근본적으로 실제로 전체 레포보다 적지 않습니다. 일을 조금만 제한하더라도 (즉, 일부만 체크 아웃하거나, 역사가 조금 되돌아가도), git은 여전히 모든 것에 관심을 갖고 지식을 가지고 다니게됩니다.
따라서 git은 모든 것을 하나의 거대한 저장소 로 보도록 강요하면 정말 심하게 확장
됩니다. 나는 우리가 아마도 그것을 개선 할 수는 있지만 부분이 실제로 고칠 수 있다고 생각하지 않습니다.그리고 네, “큰 파일”문제가 있습니다. 나는 거대한 파일에 대해 어떻게 해야할지 모르겠다. 우리는 그들을 빨아 먹는다.
다른 답변 에서 더 많은 것을보십시오 : Git의 한계는 각 저장소가 ” 일관된 파일 세트 “, “모든 시스템”자체를 나타내야한다는 것입니다 ( “저장소의 일부”를 태그 할 수는 없습니다).
시스템이 자율적이지만 상호 의존적 인 부품으로 만들어진 경우 하위 모듈 을 사용해야합니다 .
Talljoe의 답변 에서 알 수 있듯이 한도는 시스템 하나 (대수의 파일 수) 일 수 있지만 Git의 특성을 이해하면 (SHA-1 키로 표시되는 데이터 일관성에 대해) 진정한 “제한”을 알 수 있습니다 A는 사용 즉, 당신이 저장하려고해서는 안 : 한 모든 것을 당신은 항상 얻을 또는 태그 모든 것을 다시 준비하지 않는 한, 힘내 저장소에이. 일부 큰 프로젝트의 경우에는 의미가 없습니다.
git limit에 대한 자세한 내용은 ” 큰 파일을 가진 git ”
( git-lfs : git repo 외부에 큰 파일을 저장하는 솔루션을 참조하십시오 . GitHub, 2015 년 4 월)
git repo를 제한하는 세 가지 문제 :
- 거대한 파일 ( packfile의 xdelta 는 메모리에만 있으며 큰 파일에는 좋지 않습니다)
- 대량의 파일 , 즉 블 롭당 하나의 파일, 한 번에 하나의 팩 파일을 생성하는 느린 git gc.
- 거대한 packfiles 제 (거대한) packfile에서 데이터를 검색하는 비효율적 인 packfile 인덱스.
최신 스레드 (2015 년 2 월) 는 Git 리포지토리의 제한 요소를 보여줍니다 .
중앙 서버에서 몇 개의 동시 복제본이 다른 사용자의 다른 동시 작업 속도를 늦출 수 있습니까?
복제시 서버에는 잠금이 없으므로 이론 복제는 다른 작업에 영향을 미치지 않습니다. 복제는 많은 양의 메모리를 사용할 수 있습니다 (연결 가능성 비트 맵 기능을 설정하지 않은 경우 많은 CPU를 사용해야 함).
‘
git pull
‘가 느려 집니까?서버 측을 제외하면 트리의 크기가 주요 요인 이지만 25k 파일은 괜찮습니다 (리눅스에는 48k 파일).
‘
git push
‘?이것은 레포의 역사가 얼마나 깊은 지 또는 나무가 얼마나 넓은 지에 영향을받지 않으므로 빨리해야합니다.
아 심판의 수는 모두에 영향을 미칠 수
git-push
및git-pull
.
스테판은이 분야에서 나보다 잘 알고 있다고 생각합니다.‘
git commit
‘? ( 참조 3 에서 느리게 나열되어 있습니다.) ‘git status
‘? (보이지 않지만 참조 3에서 다시 느리게하십시오.)
(또한git-add
)다시, 당신의 나무의 크기. 귀하의 레포 크기에 대해서는 걱정할 필요가 없습니다.
일부 작업은 일상적인 것처럼 보이지 않을 수 있지만 웹 프런트 엔드에서 GitLab / Stash / GitHub 등으로 자주 호출되는 경우 병목 현상이 발생할 수 있습니다. (예를 들어, ‘
git branch --contains
‘는 많은 수의 분기에 의해 크게 부정적인 영향을받는 것으로 보입니다.)
git-blame
파일을 많이 수정하면 속도가 느려질 수 있습니다.
답변
실제 제한은 없습니다. 모든 것이 160 비트 이름으로 명명됩니다. 파일의 크기는 64 비트 숫자로 표현할 수 있어야하므로 실제 제한도 없습니다.
그러나 실제적인 한계가 있습니다. 880,000 개 이상의 파일을 가진 ~ 8GB의 저장소가 있으며 git gc는 시간이 걸립니다. 작업 트리는 다소 커서 전체 작업 디렉토리를 검사하는 작업에는 시간이 오래 걸립니다. 이 저장소는 데이터 저장에만 사용되므로이를 처리하는 자동화 된 도구 일뿐입니다. 리포지토리에서 변경 내용을 가져 오는 것이 동일한 데이터를 재 동기화하는 것보다 훨씬 빠릅니다.
%find . -type f | wc -l
791887
%time git add .
git add . 6.48s user 13.53s system 55% cpu 36.121 total
%time git status
# On branch master
nothing to commit (working directory clean)
git status 0.00s user 0.01s system 0% cpu 47.169 total
%du -sh .
29G .
%cd .git
%du -sh .
7.9G .
답변
너무 큰 파일 (필자의 경우 Cygwin, XP, 3GB RAM)이 너무 큰 파일을 추가하는 경우이를 예상하십시오.
치명적 : 메모리 부족, malloc 실패
자세한 내용은 여기
업데이트 3/2/11 : Windows 7 x64에서 Tortoise Git과 유사하게 보임. 많은 메모리 사용, 매우 느린 시스템 응답.
답변
2012 년 2 월, 거대한 테스트 저장소에서 Git을 테스트하는 페이스 북 소프트웨어 엔지니어 Joshua Redstone 의 Git 메일 링리스트 에는 매우 흥미로운 스레드 가있었습니다 .
테스트 저장소에는 4 백만 개의 커밋, 선형 기록 및 약 130 만 개의 파일이 있습니다.
실행 된 테스트에 따르면 이러한 리포지토리의 Git을 사용할 수없는 것으로 나타 났지만 (차가운 작업은 몇 분 동안 지속될 수 있음) 향후에 변경 될 수 있습니다. 기본적으로 성능은 stat()
커널 FS 모듈에 대한 호출 수에 의해 불이익을 받으므로 리포지토리의 파일 수와 FS 캐싱 효율성에 따라 달라집니다. 자세한 내용은 이 요지 를 참조하십시오 .
답변
2018-04-20 현재 Windows 용 Git에는 특정 구현을 사용하여 파일 크기를 최대 4GB로 효과적으로 제한 하는 버그 가 있습니다 (이 버그 는 lfs에도 전파됩니다 ).
답변
그것은 당신의 의미가 무엇인지에 달려 있습니다. 실제 크기 제한이 있습니다 (큰 파일이 많으면 지루하게 느려질 수 있습니다). 파일이 많으면 스캔 속도가 느려질 수 있습니다.
그러나 모델에는 본질적으로 한계가 없습니다. 확실히 그것을 잘못 사용하고 비참 할 수 있습니다.
답변
대용량 파일 커밋을 리포지토리의 일부로 피하는 것이 좋습니다 (예 : 데이터베이스 덤프가 다른 곳에서 더 나을 수 있음).하지만 리포지토리의 커널 크기를 고려하면 편안하게 작업 할 수 있습니다. 크기가 작고 복잡하지 않은 것이 있습니다.