Program Tip

힘내 및 하드 링크

programtip 2020. 10. 10. 10:55
반응형

힘내 및 하드 링크


Git이 저장소 외부를 가리키는 심볼릭 링크를 인식하지 못한다는 점을 고려할 때 하드 링크를 사용하는 데 문제가 있습니까?

힘내가 그들을 깰 수 있습니까? 자세한 정보를 알려주시겠습니까?


Git의 디렉터리를 나타내는 'tree'개체는 파일 이름과 권한 (하위 집합)을 저장합니다. inode 번호 (또는 다른 종류의 파일 ID)는 저장하지 않습니다. 따라서 하드 링크 적어도 metastore 또는 git-cache-meta 와 같은 타사 도구 없이는 git로 표현할 수 없습니다 (그 도구로도 가능할지 확실하지 않습니다).

Git은 업데이트 할 필요가없는 파일을 건드리지 않으려 고하지만, git이 하드 링크를 보존하지 않기 때문에 git에 의해 깨질 수 있다는 점을 고려해야합니다.


저장소 외부를 가리키는 심볼릭 링크에 대해 : git에는 문제가 없으며 심볼릭 링크의 내용을 보존해야합니다 ... 그러나 이러한 링크의 유틸리티는 해당 심볼릭 링크가 깨 졌는지 여부가 git 저장소 외부 의 파일 시스템 레이아웃에 달려 있기 때문에 나에게 모호 합니다. , git의 통제하에 있지 않습니다.


좋아, 이제 이것은 늦은 응답입니다 = D

후크를 사용 git pull하여 스크립트 이벤트 핸들러를 .git/hooks/post-merge파일에 작성하여 이벤트를 캡처 할 수 있음을 발견했습니다 .

첫째, 당신은 chmod +x그것을 해야 합니다.

그런 다음 그 ln안에 명령을 넣어 각 풀에서 하드 링크를 다시 만듭니다. 깔끔하네요!

그것은 작동하고, 내 프로젝트에 필요 ls -i했고 파일이 자동으로 연결되었음을 보여줍니다 pull.


내 예 .git/hooks/post-merge:

#!/bin/sh
ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf
ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf
ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf
ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf

중요 : 보시다시피 저장소의 파일 경로는로 시작해야하며 파일에 $GIT_DIR부분 상대 경로를 추가 해야합니다 .

또한 중요 -f합니다. 대상 파일을 다시 만들고 있기 때문에이 필요합니다.


msysgit 문제에서

정션 포인트는 심볼릭 링크가 아닙니다. 따라서 심볼릭 링크는 msysGit에서 단순히 지원되지 않습니다.

또한 하드 링크는 Git에 의해 추적되지 않았습니다 .

문제는 Windows 지향 (msysgit에 관한 것이기 때문에)이었고 symlink의 잠재적 지원에 대한 논쟁이었습니다.
그러나 하드 링크에 대한 의견은 일반적으로 Git에 관한 것입니다.


Google 'git preserve hard links'는 git이 아마도 설계 상 하드 링크 구조 AFAIK를 보존하는 방법을 모른다는 것을 보여줍니다.

내 웹 프로젝트는 다음과 같이 하드 링크를 사용합니다.

www/products/index.php
www/products/dell_latitude_id577/index.php #(hard linked to above)
www/products/dell_inspiron_id323/index.php #(hard linked again to above)

me@server:www/products$ ls -l index.php
-rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*

index.php를 변경하고 싶다면 한 곳에서 변경하고 하드 링크 (제품 세부 정보 페이지)는 변경 사항을 가리 킵니다. 단, git은 다른 컴퓨터에서 복제 및 가져 오는 동안이 관계를 유지하지 않습니다.

me@server:www$ git pull

다른 컴퓨터에서 각 하드 링크에 대해 새로운 index.php를 생성합니다.

참고 URL : https://stackoverflow.com/questions/3729278/git-and-hard-links

반응형