2011-02-16 3 views
0

나는 다른 몇몇 개발자들과 마침내 제대로 작동하는 저장소를 가지고 있습니다. 우리는 FTP overwrites로 서로 죽이는 것으로부터 마이그레이션하고 있습니다.ftp 다운로드 후 git reset

개발자 중 한 명이 FTP를 사용하여 서버에 변경 사항을 업로드하고 이러한 변경 사항을 다운로드하여 로컬 폴더를 덮어 씁니다. 나는 자식이 단지 변경된 파일을 인식 할 것이라고 생각했지만 그렇지 않다. 사실, git은 파일이 변경되지 않았다고 생각합니다.

git에게 "모든 파일을 물리적으로 다시 스캔하여 변경 사항이 있는지 확인하십시오."라는 명령이 있습니까? 이 시점에서 어떤 파일이 FTP 다운로드에서 변경되었는지 확신 할 수 없으므로 git push/pull을 수행 할 때 아무런 변화가 없다고 말하고 있습니다.

답변

1

봐 : Git Push into Production (FTP) FTP를 통해 서버에 생산 준비 변경을 추진하기 위해 자식-FTP라는 이름보다는 훌륭한 도구가 포함되어

.

https://github.com/resmo/git-ftp

나는 그것이 내가 생각 할 때마다 내가 만든 dev에 변화가 내 서버에 푸시 할 준비가되어, FTP에 밀어 사용합니다.

0

힘내라 나무의 루트에 .git 디렉토리에 저장된 많은 데이터 구조를 사용하여 저장소의 상태를 추적합니다. 따라서 FTP 서버에서 동료의 .git 디렉토리로 파일을 덮어 쓰면 git까지 그가 업로드했을 때와 같은 저장소 상태를 가지고 있음을 알 수 있으므로 물론 변경 사항이보고되지 않습니다.

이것은 git을 사용하는 데 좋은 워크 플로우는 아니지만 FTP {up, down}로드를 git에서 로컬 버전으로 결합해야하는 경우 GIT_DIR 환경 변수를 설정하여 소스 트리 외부의 디렉토리를 참조하도록 설정할 수 있습니다 (새로운 FTP 스냅 샷을 다운로드 할 때 덮어 쓰지 않을 것입니다). git은 저장소와 히스토리 메타 데이터를 추적 할 수 있습니다.

0

FTP를 통한 변경 사항 전송은 git과 같은 버전 제어 시스템을 사용하는 목적에 어긋나므로 올바른 git 서버 설정을 진지하게 고려해야합니다. 모든 사람이 서버에 대한 SSH 액세스를 가지고 있다고 가정하면 설치가 매우 간단합니다. 모든 사람이 읽고 쓸 수있는 서버의 디렉토리에 맨 저장소를 만들어야합니다. 또한 모든 사용자에게 셸 액세스 권한을 부여 할 필요없이 설정할 수 있습니다.

무료 서버 Pro Git book에서 자식 서버 설정에 대한 자세한 내용을 볼 수 있습니다. 여기에는 여러 가지 기술이 자세히 설명되어 있습니다. 당신은 그 경로로 가고 싶다면 호스팅 된 git 서비스를 사용할 수도 있습니다.

Matt의 대답은 정확하고 가능성이 높습니다. 실수로 git 디렉토리를 덮어 쓰며 로컬 저장소에 대한 정보를 추적합니다.

GitHub에있는 항목이 여전히 좋은 경우 git fetch 다음 git reset origin/master을 사용하여 로컬 저장소를 GitHub의 원격 저장소 상태로 되돌릴 수 있으며 모든 로컬 차이점을 유지합니다. 이렇게하면 GitHub으로 푸시되지 않은 로컬 커밋을 잃게되지만 로컬에서 데이터가 손실되지는 않습니다. 우연한 덮어 쓰기 후에 GitHub로 밀어 넣었다면 아마도 이것은 도움이되지 않을 것입니다 (밀어 내기에서 명시적인 --force 없이는 할 수 없었을 것입니다). "origin/master"대신 커밋의 해시를 지정하여 특정 커밋을 다시 설정할 수도 있습니다. 이 스레드에서

+0

우리는 github을 사용하고 ftp는 단지 감시였습니다.우리가 .git에 갔다는 메시지를받지 못한 한 명의 개발자가 있었고 ftp로 일부 파일을 덮어 썼습니다. (어느 것이 바뀌 었는지 확실하지 않음). 그래서 모든 저장소가 일치하는 것은 아닙니다. 하지만 파일 서버의 파일은 저장소에있는 파일과 다릅니다. 우리 저장소를 모두 지우고 ftp에있는 것을 다운로드하고 저장소를 다시 시작해야합니까? –

+0

새 정보를 기반으로 답변을 업데이트했습니다. 도움이되는지 알려주세요. –