2017-02-27 13 views
0

mysql 데이터베이스를 덤프하고 pre-commit 훅을 사용하여 준비 영역에 .sql 덤프 파일을 추가하려고합니다. 그러면 커밋에 포함될 수 있습니다 (Windows 서버의 경우 2012 R2/IIS). 다음 코드는 데이터베이스를 멋지게 덤프하지만, 커밋 한 후에도 여전히 스테이징 영역에 be.sql 파일을 표시합니다. 가끔은 (?) - 커밋 (?) 후 준비에 파일을 추가하는 것 같습니다. 이것은 내가 커밋 한 후에는 파일을 추가 할 수있다 왜 아무 생각이 장소도지지 않습니다 그래서 훅을 미리 커밋이다힘내 사전 커밋 훅 커밋 후 파일 추가하기

#!/bin/bash 

# Dump Database 
/c/Program\ Files\ \(x86\)/MySQL/MySQL\ Server\ 5\.7/bin/mysqldump.exe -u root --skip-extended-insert be > /c/inetpub/wwwroot/directory/be/be.sql 

# Add Database 
cd /c/inetpub/wwwroot/directory/be 
git add be.sql 

동작이 약간 이상입니다 - 나는 be.sql가 준비 여전히 볼 수 지역 그래서 나는 커밋을합니다. 나중에 내가 상태가되면 나무가 깨끗해진다. 내가 다시 커밋하고 git status를 실행하면 스테이징 인덱스에 be.sql 파일이 수정 된 것으로 표시됩니다 (수정하지 않았습니다). 그리고 앞뒤로 간다. 그냥 .sql 파일을 덤프하고 .sql 파일을 준비 인덱스에 추가 한 다음 준비 인덱스가 깨끗할 때마다 커밋합니다. 왜 이런 일이 일어나는지에 대한 아이디어는 크게 감사 할 것입니다.

+0

마지막 줄에 "exit 0"을 추가하십시오 (몇 개의 "internets"예에서 보았습니다) – barat

+0

스크립트에 "cd"가있어서 현재 디렉토리에서 옮깁니다. 까닭은 약간 까다 롭습니다. - 다른 * 디렉토리에. 그러나 동시에 여러 가지 Git 환경 변수를 덮어 쓰지는 않습니다. Git이 특정 저장소, 색인 파일 및/또는 작업 트리 경로로 지시하도록 설정하면 Git이 여전히 특정 디렉토리로 이동할 수 있습니다. 잠재적으로 잘못된 파일). 나는 Git-for-Windows가 이상하고 특별한 일을하는지, "정상적인"Git인지를 확신하지 못한다. 그러나 일반적인 Git은'git'과 sub-command 사이의 인수를 기반으로 변수를 설정한다. [계속] – torek

+0

* commit * hooks (pre-commit, edit-commit-msg)는'GIT_INDEX_FILE'가 설정된 상태로 실행됩니다. 다행히도 인덱스 파일 (스테이징 영역)을 수정하는 것은 Git 버전 1.5.4 이후로 사전 커밋 훅에서 명시 적으로 허용됩니다. 그러나 경로가 상대 경로 일 수 있으며, 다른 경로로 이동하는 경우 경로를 조정해야합니다. – torek

답변

0

사용 :

git commit -m "Message" --allow-empty 

는이 일 것으로 보인다 커밋 할 때. 후크가 작동하기 위해서는 자식이 다른 단계적 변경을 필요로하는 것처럼 보입니다. 따라서 기본적으로 커밋을하지는 않지만 여전히 be.sql 파일을 덤프합니다.이 파일은 다음 번에 날짜가 변경되었으므로 스테이징 인덱스에 표시됩니다. 다른 단계적 변경 사항이 있는지 여부에 관계없이 커밋을 완전히 수행 할 수 있도록 --allow-empty 옵션을 사용 했으므로 준비된 인덱스에 아무 것도 지정하지 않고 커밋 할 수 있습니다.