Git 상태 줄 끝 무시 / 동일한 파일 / Windows & Linux 환경 / 드롭박스 / mold
만드는 법
git 상태
줄 끝 차이를 무시하시겠습니까?
배경 정보:
저는 프로젝트 작업을 위해 임의로 Windows와 Linux를 사용합니다.프로젝트가 드롭박스에 있습니다.
git diff ignore 줄 끝을 어떻게 만드는지에 대해 많은 것을 발견했습니다.제가 각 파일에 대해 meldgit diff를 사용하기 때문에 meld를 엽니다.그리고 멜드는 "동일한 파일"이라고 말합니다.
어떻게 하면 이런 일을 피할 수 있을까요?Git는 변경된 파일에 대해서만 meld를 열어야 합니다.그리고 git 상태는 파일 끝만 다를 경우 파일이 변경된 것으로 보고되지 않습니다.
편집: 원인:
이 문제는 Windows의 이 설정 때문에 발생했습니다.
core.autoclf 참
그래서 리눅스에서 작업 복사본을 확인하고 코어를 설정했습니다.Windows에서 autocolf false.
git 상태가 다른 새 라인을 무시하도록 만드는 방법을 아는 것은 여전히 좋을 것입니다.
코어를 설정해 보십시오.다음과 같은 autocolf 값:
git config --global core.autocrlf true
OP가 다중 OS 솔루션의 필요성을 언급하기 때문에 이 답변은 적절해 보입니다.이 Github 도움말 문서에서는 OS 간에 끝나는 회선을 처리하는 데 사용할 수 있는 접근 방식에 대해 자세히 설명합니다.교차 OS 라인 종료를 관리하는 데는 글로벌 및 레포당 접근 방식이 있습니다.
글로벌 어프로치
Linux 또는 OS X에서 Git 줄 끝 처리 구성:
git config --global core.autocrlf input
Windows에서 Git 줄 끝 처리 구성:
git config --global core.autocrlf true
레포별 접근 방식:
레포의 루트에서 다음을 생성합니다..gitattributes프로젝트 파일의 줄 끝 설정을 파일로 지정하고 다음 형식으로 한 번에 한 줄씩 정의합니다.path_regex line-ending-settings어디에line-ending-settings는 다음 중 하나입니다.
- 본문
- binary(Git가 줄 끝을 수정해서는 안 되는 파일 - 이는 PNG와 같은 일부 이미지 유형이 브라우저에서 렌더링되지 않을 수 있기 때문입니다.)
그text값을 추가로 구성하여 Git에 일치하는 파일의 줄 끝을 처리하는 방법을 지시할 수 있습니다.
text행 끝을 OS 기본 행 끝으로 변경합니다.text eol=crlf선 끝을 다음으로 변환합니다.CRLF체크아웃 중인text eol=lf선 끝을 다음으로 변환합니다.LF체크아웃 중인text=auto라인 핸들을 Git의 재량에 맡기는 합리적인 기본값입니다.
다음은 샘플 .git 특성 파일의 내용입니다.
# Set the default behavior for all files.
* text=auto
# Normalized and converts to
# native line endings on checkout.
*.c text
*.h text
# Convert to CRLF line endings on checkout.
*.sln text eol=crlf
# Convert to LF line endings on checkout.
*.sh text eol=lf
# Binary files.
*.png binary
*.jpg binary
줄 끝 설정을 변경한 후 보고서를 새로 고치는 방법에 대한 자세한 내용은 여기를 참조하십시오.Tldr:
Git로 파일을 백업하고, 저장소의 모든 파일(.git 디렉터리 제외)을 삭제한 다음 파일을 한 번에 모두 복원합니다.현재 파일을 Git에 저장하여 작업이 손실되지 않도록 합니다.
git add . -u
git commit -m "Saving files before refreshing line endings"
인덱스를 제거하고 Git가 작업 디렉터리를 다시 검색하도록 합니다.
rm .git/index
Git 인덱스를 다시 작성하여 모든 새 줄 끝을 선택합니다.
git reset
다시 작성되고 정규화된 파일을 표시합니다.
어떤 경우에는, 이것만 하면 됩니다.다른 사용자는 다음과 같은 추가 단계를 완료해야 할 수도 있습니다.
git status
변경된 모든 파일을 다시 추가하고 커밋할 준비를 합니다.변경되지 않은 파일이 있는 경우 이 파일을 검사할 수 있습니다.
git add -u
여기에서 "경고: CRLF가 파일에서 LF로 대체됩니다"라는 메시지를 많이 볼 수 있습니다.
.git 특성 파일을 다시 씁니다.
git add .gitattributes
저장소에 변경 사항을 커밋합니다.
git commit -m "Normalize all the line endings"
대신 다음 설정을 사용하여 .git 특성을 사용합니다.
# Ignore all differences in line endings
* -crlf
.git 특성은 글로벌 .gitconfig와 동일한 디렉토리에 있습니다..git 특성이 없으면 해당 디렉터리에 추가합니다..git 특성을 추가/변경한 후 기존 파일에 변경 사항을 성공적으로 적용하려면 저장소를 하드 리셋해야 합니다.
윈도우즈 운영 체제의 git 명령과 관련된 문제:
$ git add --all
경고: 다음에서 LF가 CRLF로 대체됩니다.
파일의 원래 줄 끝은 작업 디렉토리에 있습니다.
해상도:
$ git config --global core.autocrlf false
$ git add --all
경고 메시지가 나타나지 않습니다.
Linux를 은 Windows(윈도우) Linux입니다.core.autocrlf true도움이 안 됐어요그 후로 아무것도 바뀌지 않았습니다.git checkout <filename>.
대신 해결 방법을 사용합니다.git status-gitstatus.sh
#!/bin/bash
git status | grep modified | cut -d' ' -f 4 | while read x; do
x1="$(git show HEAD:$x | md5sum | cut -d' ' -f 1 )"
x2="$(cat $x | md5sum | cut -d' ' -f 1 )"
if [ "$x1" != "$x2" ]; then
echo "$x NOT IDENTICAL"
fi
done
나는 단지 비교할 뿐입니다.md5sum파일과 저장소에 있는 해당 파일의 형제.
출력 예:
$ ./gitstatus.sh
application/script.php NOT IDENTICAL
application/storage/logs/laravel.log NOT IDENTICAL
줄 끝 부분의 차이를 무시하는 스크립트를 만들었습니다.
그러면 커밋 목록에 추가되지 않고 수정된 파일이 표시됩니다(줄 끝 부분의 차이를 무시한 후)."add" 인수를 추가하여 이러한 파일을 커밋에 추가할 수 있습니다.
#!/usr/bin/perl
# Usage: ./gitdiff.pl [add]
# add : add modified files to git
use warnings;
use strict;
my ($auto_add) = @ARGV;
if(!defined $auto_add) {
$auto_add = "";
}
my @mods = `git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-`;
chomp(@mods);
for my $mod (@mods) {
my $diff = `git diff -b $mod 2>/dev/null`;
if($diff) {
print $mod."\n";
if($auto_add eq "add") {
`git add $mod 2>/dev/null`;
}
}
}
소스 코드: https://github.com/lepe/scripts/blob/master/gitdiff.pl
업데이트:
- fix by evandro777 : 파일 이름이나 디렉터리에 공간이 있을 때
vscode에서는 모든 것을 스테이징합니다. 줄 끝만 다른 파일은 사라지고 내용이 다른 파일만 남깁니다.그런 다음 단계를 해제하여 원하는 상태로 이동할 수 있습니다.
+shukshin.ivan 스크립트를 약간 변경했습니다 - windows / linux line ending을 무시합니다.
#!/bin/bash
git status | grep modified | cut -d' ' -f 4- | while read x; do
d="$(git --no-pager diff --ignore-cr-at-eol $x)"
if [ "$d" ]; then
echo "$x NOT IDENTICAL"
else
echo "$x IDENTICAL"
# uncomment the next line to undo the line ending changes
# git checkout $x
fi
done
언급URL : https://stackoverflow.com/questions/20496084/git-status-ignore-line-endings-identical-files-windows-linux-environment
'programing' 카테고리의 다른 글
| Azure의 무료 SQL Server (0) | 2023.04.27 |
|---|---|
| 이클립스의 Android Device Chooser가 내 Android 장치를 표시하지 않는 이유는 무엇입니까? (0) | 2023.04.27 |
| HTTPPOST에서 양식 값을 검색하는 방법, 사전 또는? (0) | 2023.04.27 |
| WPF 프리뷰이벤트란? (0) | 2023.04.22 |
| 변수를 사용한 Excel vba 콜서브루틴 (0) | 2023.04.22 |