Subversion(또는 다른 프로그램)이 정기적으로 커밋을 수행하도록 만드는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/758916

  •  09-09-2019
  •  | 
  •  

문제

나는 30분마다 내가 작업 중인 프로그램을 자동으로 커밋하도록 컴퓨터를 구성하고 싶습니다.저는 svn 저장소를 사용하고 있으므로 30분마다 'svn ci'를 실행하는 스크립트일지라도 괜찮습니다.문제는 내가 그 일을 어떻게 해야 할지 모른다는 것이다.

누군가 나에게 이 주기적인 커밋 작업을 작동시킬 수 있는 내용을 말하거나 지시해 줄 수 있습니까?

미리 감사드립니다.

편집하다:죄송합니다. 제가 왜 이 일을 하고 싶은지 사람들을 혼란스럽게 만든 것 같습니다.내가 이것을 하고 싶은 유일한 이유는 내 강사가 우리의 코드가 시간이 지남에 따라 어떻게 발전하는지 알고 싶어하기 때문이고 나는 이 목적을 위해 svn을 사용하는 것이 좋은 아이디어라고 생각했습니다.최신 커밋이 작동하는지 여부는 중요하지 않습니다.시간이 지남에 따라 코드에 적용된 변경 사항을 표시하면 됩니다.

도움이 되었습니까?

해결책

나는 그러한 일련의 자동 커밋으로 당신의 컨트롤 버전 시스템을 더럽 히지 않을 것입니다. 그러나 저는 제어 버전 시스템을 사용하여 해당 정보를 제공한다는 아이디어에 동의합니다.

그런 다음 내 제안은 다음과 같습니다. 소프트웨어에는 저장소를 사용하고 자동 커밋을 저장하는 데 다른 것입니다. 작업이 완료되면 메인 저장소의 모든 자동 커밋을 하나의 논리적 커밋 만 병합하십시오.

git과 함께, 나는 이것을 할 것이다 :

  1. Repo 'foo': 메인 저장소
    1. Refs/Heads/... : 개발 지점의 위치
    2. refs/sessions/... : 더러운 커밋으로 작업의 위치.
  2. 귀하의 작업 사본 :
    1. "git init"
    2. "git remote add add foo git : // foo/...; git fetch foo"
  3. 지점 만들기 : "Git Checkout -B Bar Foo/Master"
  4. 지점의 시작에 태그 : "git tag barbegin"
  5. 스크립트를 활성화하십시오 : "사실이지만, git add -a.; git commit -m 'autocommit'; done"
  6. Cron 작업을 사용하지 않으므로 자동 커뮤니티를 쉽게 활성화/비활성화 할 수 있습니다.
  7. 당신의 일을하십시오
  8. 작업이 완료된 후 스크립트를 비활성화하십시오
  9. 보류중인 변경 사항을 저 지르십시오
  10. 이제 Branch Bar에 많은 자동 커밋이 있으며 Barbegin과 함께 Branch의 초기 커밋을 태그했습니다.
  11. 자동 커밋을 게시하십시오.
    1. "git tag barend"
    2. "git push foo barbegin : refs/sessions/사용자 ID/세션 ID/시작"
    3. "git push foo barend : refs/sessions/user id/session id/end"
  12. 이제 작업을 게시했으며 강사가 액세스 할 수 있습니다.
  13. Foo 저장소 업데이트 :
    1. "git rebase -I-onto Barbegin Barbegin"및 설명대로 진행 여기
    2. 나는 모든 커밋을 스쿼시 할 것입니다. "결국에는 하나만있을 수 있습니다".
    3. "git push foo bar : master" # 하나의 커밋 만 푸시됩니다
  14. 청소:
    1. "git tag -d barbegin"
    2. "git tag -d barend"
    3. "git branch -d bar"

이 결국, 나는 그러한 종류의 데이터로 유용한 정보가 수집되지 않을 것이라고 생각합니다. 그래서 나는이 워크 플로를 피하려고 노력할 것입니다. 그러나 실제로 필요한 경우, 나는 그렇게 할 것입니다.

다른 팁

명백한 대중의 의견과는 달리, 나는 이것이 과제의 맥락에서 SVN을 잘 사용한다고 생각합니다.

KDESVN과 같은 도구 (또는 더 나은 TortoisesVN이지만 Windows에서만) 로그보기, 차이 및 비난에서 일어나는 일에 대한 훌륭한 통찰력을 제공 할 수 있습니다.

Ubuntu를 사용하는 경우 작업중 인 콘솔 에서이 Bash 스크립트를 실행하십시오.

#!/bin/bash
while [ 1 ]
do
        # Do the commit
        svn ci --message "Automated commit" ~/yourworkingcopy

        # Wait until next commit time
        sleep 1800
done

쉘 스크립트를 실행하는 Cron 작업을 시도 할 수 있습니다. 당신은 어떤 OS에 있습니까?

그러나 나는 당신이 왜 이것을하고 싶은지 궁금합니다. 커밋은 시간 간격을 기반으로하지 않고 기능 또는 버그 수정으로 구성되어야합니다. 당신은 당신의 수정을 쓸모 없게 만들어 줄 변경 (파일 그룹)의 중간에 커밋 될 가능성이 높습니다.

정해진 일정에 따라 커밋을 설정하는 것은 특히 좋은 생각이 아니라고 생각합니다.특히 테스트 및 지속적인 통합을 시작하는 경우.설정된 간격으로 커밋하면 해당 시간 내에 변경 세트가 완료된다는 보장이 없기 때문에 빌드가 중단됩니다.

자동 커밋을 원하는 경우 더 좋은 방법은 커밋을 빌드 프로세스 자체의 일부로 만드는 것입니다.빌드 프로세스의 마지막 단계를 저장소에 대한 커밋으로 만드세요.이렇게 하면 빌드가 실패하더라도 가비지를 커밋하지 않습니다.

모든 종류의 make에서 완전히 가능하며 Visual Studio에는 이와 같은 작업을 수행하도록 설정할 수 있는 사전 및 사후 빌드 이벤트가 있다는 것을 알고 있습니다.따라서 저는 대부분의 최신 IDE가 이 문제를 처리할 수 있다고 확신합니다.

특히 이 문제에 대한 특별한 고려 사항은 다음과 같습니다.
커밋 후크를 프로세스 시작 부분으로 이동하면 언제 엉망이 되었는지, 오류를 어떻게 수정했는지 추적할 수 있습니다.

나는 전복을 사용할 것이지만, 대신 단일 변경 작업을 수행하고 저장소에이를 통합하는 습관에 빠지게 될 것입니다.

이런 식으로 강사는 원한다면 무엇 변경되었지만 변경되었습니다. 이것은 내가 상상할 훨씬 더 유용 할 것입니다.

유닉스의 맛으로 실행중인 경우 크론 정기적으로 명령을 실행하는 작업.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top