>

최종 목표 :Git에서 추적하는 파일을 갖고 싶지만 해당 파일을모든 지점의 동일한 버전으로 설정하십시오. 파일을 무시하면 모든 분기에서 동일하지만 불행히도 추적되지는 않습니다. 내가 git push 를 실행할 때  등으로 repos 등 사이에 이러한 파일을 전달해야합니다.

예를 들어, .git 폴더에있는 데이터는 일반적으로 git 무시됩니다. 데이터가 모든 분기와 독립적이지만 모든 분기에 계속 나타나도록 저장소에 일부 데이터를 추가하고 싶습니다. 저장소를 복제하면 데이터가 표시됩니다.

이것이 가능합니까? 예를 들어, .git  dir은 다음과 같습니다.

.git/
  branches/
  hooks/
  objects/
  config
  HEAD
  index

폴더 추가를 생각하고있었습니다 :

.git/
  .oresoftware/

내 데이터를 모든 지점과 독립적 인 곳에 저장합니다.

.git 저장소의 데이터가 실제로 추적되지 않기 때문에 이것이 효과가 있다고 생각하지 않습니다. git에서 추적하는 것을 찾고 있지만 모든 지점에서 동일합니다 ...

업데이트: 답변을 읽고 잠시 동안 이것에 대해 생각한 후에 새 파일로 초기 커밋을 수정하면 마술처럼 작동 할 수 있다고 생각했지만 물론 Git은 작동하지 않습니다. , 각 커밋은 총 스냅 샷이므로 사실 이후에 커밋을 변경해도 새로운 커밋은 변경되지 않습니다.

  • 답변 # 1

    알겠습니다. 지금 귀하의 질문을 이해했다고 생각합니다. 기본적으로 git이 데이터를 추적 할 수 있도록 보이는 폴더에 데이터를 추가해야합니다 (예 : git add <data> )  가지와 merge 중 하나에서  이 지점은 master  그런 다음 다른 두 가지를 master 와 동기화하십시오.  (와이즈 와이즈) ). 이 경우 git에 새 파일/폴더를 추가했기 때문에 병합 충돌이 발생하지 않습니다. 마지막으로 모든 지점에서 데이터를 사용할 수 있습니다. 수정(다른 사용자의 의견에 따라) : git fetch origin master && git merge origin master  지점에 특정 커밋을 적용 할 수있는 또 다른 방법입니다.

  • 답변 # 2

    git cherry-pick <commit-hash>

    이것은전형적인일뿐만 아니라, Git의 보안 모델에 필요한입니다.

    (과거에는 Git에

    ... data that is in .git folder is typically git-ignored.

    라는 파일을 만들 수있는 몇 가지 버그가있었습니다.  그들은 저장소에 들어가서 .GIT/whatever 에 존재합니다.  Windows 및 MacOS에서 체크 아웃시 시스템은 기본적으로 대소 문자를 무시하므로 .git/whatever 라는 파일  실제로 .GIT/foo 로 생성됩니다   .git/foo 이후  그 시점에 존재합니다. 이 버그는 현대 Git에서 수정되었습니다.)

    와이즈 비즈

    아니요 —하지만 원하는 것을 얻을 수있는 다른 방법이 있습니다.

    리포지토리 복제는 다음 단계와 같습니다.

    빈 디렉토리를 작성하거나 기존 디렉토리를 사용하십시오. .git .

    빈 Git 저장소를 새로 작성하십시오 :

    I want to add some data to my repo so that the data is independent of all branches, but still appears in all branches, and when you clone the repo, the data shows up.

    Is this possible?

    .

    일반적으로 mkdirpath 라는원격추가 URL : cdpath&& git init .

    원격에서 모든 것을 가져 오십시오 : origin .

    git remote add originurl 를 통해 지점 만들기 : git fetch origin 여기서분기는 일반적으로 이전 git checkout 중에 생성 된 원격 추적 이름에서 생성됩니다.  단계.

    역사적 특성이 많고 문제가 발생하면 문제가 있으므로 위의 내용이 완벽하지는 않습니다. 또한 선택적 git checkoutbranch 가 생략되었습니다.  단계. 마지막에 선택된 브랜치는 git fetch 에서 만든 브랜치입니다.  논의. 당신의 git config 경우  인수는 분기 대신 태그 이름을 지정합니다. Git은 분기를 만들지 않고 분리 된 HEAD 만 체크 아웃합니다. 당신이 -b 를 제공하지 않으면  인수, Git은 원격에서 지시문을 사용하여 작성할 분기를 파악합니다. 기본적으로 일반적인 결과는 -b 입니다. -b 와 동일한 커밋을 가리 키도록 생성 .

    리포지토리에 지점 또는 일부 지점이 있으면 해당 지점 — 더 정확하게는 master 와 같은이름  그리고 origin/master  등-저장소를 소유 한 사람이 소유합니다. 그들은 원하는 것을 무엇이든 할 수 있습니다. 복제 한 저장소의 소유자 인 사용자는이를 중지 할 수 없습니다. 그들에게는 파일이 지점에 표시되도록만들수 없습니다. 물론 우리는 전체 저장소에 대해 말할 수 있습니다. 그래서 그것은 논쟁으로 조금 어리석은 것입니다. 전체저장소는 그들과 관계가 있습니다.

    아마도 원하는 내용을 파일에 어딘가에 설치할 수 있도록쉬운것입니다. 그렇게하는 방법은 간단한 이름으로 콘텐츠에 액세스 할 수 있도록하는 것입니다. 그러나 Git은 어떤 이름을 제공합니까?

    최하위 레벨에서, Git 상점은커밋으로,blobs( 파일 내용). 주어진 커밋, 트리 또는 블로 브의 실제 이름은 원시 해시 ID이며 해시 ID는 예측할 수 없으며 일반적으로 사람에게 유용하거나 액세스 할 수 없습니다. 그래서 당신은사람들에게 다음과 같이 말할 수 있습니다 :

    와이즈 비즈 와이즈 비즈   master

    그러나 (1) 해시 ID는 이해할 수 없으며 (2) 누가이 모든 것을 입력하고 싶습니까? 파일이 여러 개인 경우 파일 당 하나의 Blob 해시 ID가 필요합니다. !!

    이 작업을 수행하는 더 좋은 방법이 있습니다. develop 라는 파일이 포함 된commit객체를 만들 수 있습니다.

    extract hash ID , 등등. 이것은 언제든지 일반적인 작업 트리로 추출 할 수있는 일반적인 커밋입니다.

    이 커밋을 1bdc91e282c5393c527b3902a208227c19971b84 라는 브랜치에 넣었다고 가정하자. . 그러면 사람들에게 다음과 같이해야한다고 말할 수 있습니다.

    와이즈 비즈 와이즈 비즈

    실제로 더 짧지는 않지만 적어도 이해할 수없는 해시 ID로 가득 차 있지는 않습니다.

    와이즈 비즈   .oresoftware/foo 를 만들 것입니다  원격 추적 이름이있는 한 작업 트리에서 .oresoftware/foo  ( .oresoftware/bar 에서) )이 생성됩니다.1 ORESOFTWARE  

    run 를 제거합니다   git checkout origin/ORESOFTWARE -- .oresoftware && git reset .oresoftware 항목  그들의 색인에서 생성. 만약 git checkout   .oresoftware 에 등록되어 있습니다 작업 트리 파일은 무시됩니다. 이것은 당신이 git fetch 를해야한다는 것을 의미합니다  각 분기의 각 팁 커밋에서 디렉토리가 자동으로 편리하게 무시되지만 쉽게 수행 할 수 있습니다.

    마지막으로 사람들에게 두 개의 명백한 Git 명령을 실행하도록 지시하는 대신 다음과 같이 말할 수 있습니다.

    와이즈 비즈 와이즈 비즈

    이것은 두 개의 Git 명령을 쉘 스크립트 git clone 에 넣을 수 있음을 의미합니다. , 당신은 당신이 git reset .oresoftware 를 제공하는 것처럼 모든 지점에서 제공  모든 분기 팁에 파일. 또한 소프트웨어 빌드 프로세스를자동실행하여 .oresoftware 를 실행할 수도 있습니다. 그런 다음에는 특별한 조치가 필요하지 않습니다.

    git checkout 에있는 파일을 변경하기로 결정 했습니까? , 당신은 당신의 자신의 /.oresoftware/ 에 새로운 커밋을해야합니다  분기. 이것은 .gitignore 만 포함 할 수 있습니다.  예배 규칙서. 빌드 프로세스는 각 빌드마다 디렉토리를 추출하고 .gitignore  사용자에게 업데이트 된

    run 를 제공합니다  원격 추적 이름으로 업데이트 된 파일을 가져옵니다.

    ./setup.sh

  • 이전 python - 파이썬 - 모듈과 디렉토리에서 효율적으로 사용할 수있는 기능을 정의하는 방법
  • 다음 terraform - vSphere의 스냅 샷에서 복제 할 때 디스크 크기 조정