'U-boot'에 해당되는 글 2건

  1. 2009.05.07 Patch 파일 만들고 적용하기
  2. 2009.05.07 GIT 간단 사용기 1 2
>> 간단 시나리오.
u-boot를  git를 이용해서 받았다.
U-BOOT-1_1_6 의 TAG  를 Base로 작업을 했다 치자.
내가 가진 보드에서 무지하게 동작잘하는데, 같은 보드를 가진 client가 uboot를 달라한다.
이럴땐 어떻게 전달할까?

case 1. make clean을 해서 소스만 남긴뒤, 압축해서 메일로 보낸다.
  -> 요거 소스 용량얼마 안되고, Base 코드도 서로 모르고 하면 이게 최고다. 소스 용량이 얼마 안된다면 말이다. ㅡ,.ㅡ

case 2. Base 코드랑 compare해서 수정된 파일만 남기고 모조리 지운다. 그리고 폴더채로 압축해서 메일로 보낸다.(Beyond Compare같은 툴을 쓰면 겁나 편하다.) 
  -> 불과 4,5년전에 엄청나게 하던 짓이다.800M넘는 수만개의 파일을 비교해서 다른놈만 뽑아서 보내느라 죽는줄 알았다. 즉 무식하면 손 발이 고생한다는게 요런 짓이다.

case 3. diff 명령을 이용해 patch script 파일을 만들어 요놈만 보내자. client는 patch 명령을 이용해 틀린부분만 업데이트가 가능할 것이다.
-> 이걸 이제야 알게 되었다니 기가 막힐 노릇이다. 모르는게 약이라고는 하지만 무식하면 손 발이 고생한다는 걸 절대 잊어선 안되겠다.


1. Patch 파일 만들기.
u-boot Base코드와 u-boot-work 작업코드를 준비한다. 요기까지는 case 2랑 비슷하다.
>> diff -uprN -X  dontdiff u-boot u-boot-work > diff.patch
   u : output num lines of unified context 란다. 사실 뭔지 잘모르겠다.
   p : 비교하는 파일에 대한 정보가 diff.patch파일에 기록된다. 요놈이 없으면 patch명령이 동작하지 않는다.
   r : sub folder까지 비교한다.
   N : 추가된 파일에 대한 정보를 diff.patch파일에 기록한다.
   -X [dontdiff] : dontdiff에 대한 파일은 diff.patch파일생성에서 제외시킨다.
cf) dontdiff 파일 내용
*~
*.png
*.a
*.o
*.so
*.ko
*.gz
*.orig
*.rej
*.ver
*.bin
*_MODULES
.*
*.aux
*.dvi
*.eps
*.log
*.pdf
*.css
*.gif
*.jpeg
*.html
*.ps
*.sgml
*.tex
...

를 실행하면 두 폴더의 차이가 patch 파일이 생성된다.


2. Base 코드에 Patch 적용하기
diff.patch파일을 적당한 위치에 카피한다. u-boot-base폴더가 있는 곳에 카피를 하자.
>> cd u-boot-base
>> patch -p1 < ../diff.patch
-p[N] : Strip [N] leading components from file names.
diff에 기록된 파일path에 대하여 /를 찾아서 [N]까지를 뺀 파일에 적용한다.
즉 diff.patch에 u-boot/test.c 에 대한 파일은 -p1일 경우 test.c를 찾아서 적용, -p0일 경우엔 u-boot/test.c를 찾아서 적용하게 된다.

이러면 Patch 끝.

cf) 마음껏 퍼가셔도 됩니다.
출처 및 댓글 남겨주시면 감사하고, 것도 여의치 않으면...
그동안, 그리고 앞으로 내가 저지를 행동들이 있기에  ^____________^

'이것 저것.. > ProgramGuide' 카테고리의 다른 글

GIT 간단사용기 2  (0) 2009.05.08
GIT 간단 사용기 1  (2) 2009.05.07
Linux svn client - Nautilussvn  (0) 2009.05.05
Eclipse기반 크로스플랫폼 개발 환경  (0) 2009.04.10
Trac으로 Project를 관리해 보자  (0) 2009.02.05
Posted by 알 수 없는 사용자
GIT가  SVN과 비슷하다 하드만... 도저히 감이 안잡힌다. 뭐 이런게 다 있나 싶을정도로....

몇일간의 웹서핑과, Local에서의 테스트로 얻은것들을 정리한다.
이제 초기 작업을 위한  내용파악이 된 상태지만, 머지 않아 내가 Local에서 마음대로 쓰기에 불편하지 않을 정도가 될 것같다. (@.@ 뭐시라???)

이 문서는 기존의 Repository에서 GIT로 다운받은 후 Local에서 버전관리 하기 위한 시작단계의 내용들이다.
Sample은 u-boot 코드를 이용하였다.
Test환경은 Cygwin 상에서 이루어 졌으며, Linux상에서도 아무 문제 없이 될 듯하다.
아직은 Linux보다는 윈도우에 설치된 Cygwin이 내 입맛에는 맞는 듯하다.

1. Repository에서 GIT로 다운 받기
>> mkdir git-repos 
>> cd repos
>> git clone git://git.denx.de/u-boot.git  
혹은
>> git clone http://git.denx.de/u-boot.git  

를 실행하여 u-boot를 다운받는다.
<결과>
/home/git-repos/u-boot
가 생성된다.
앞으로 local에서 사용할 GIT의 Repository이다.

/home/git-repos/u-boot 폴더에서 git log, git tag -l, git branch 등을 이용하여 GIT의 정보를 마음껏 확인할 수있다.

2. Work Project를 생성하자.
/home/git-repos 폴더에서
>> git clone u-boot /home/work/u-boot
를 실행하여 work project를 만든다.

이제 작업할 Base 버전을 선택하고 Branch를 만들자.
물론 Main에 저장해도 상관은 없겠지만, Original Source가 내가 만든 것이 아니므로....

Tag 와  Branch를 확인해보자.
>> git tag -l

...
v1.3.4
v1.3.4-rc1
v1.3.4-rc2
v2008.10
v2008.10-rc1
v2008.10-rc2
v2008.10-rc3
...

>> git branch
>> * master
현재 등록되어서 사용되는 Branch를 볼수 있다. 
다운받은 u-boot코드는 master가 하나 딸랑 보이고 앞에 '*'가 붙어 있다. 이놈이 SVN의 trunk에 해당하는 듯 하다.
'*' 는 현재 사용되는 branch를 가르킨다.

이제, 내가 원하는 TAG의 코드로 나만의 branch를 생성시켜보자.
생성 명령은 checkout 이고, Branch 생성은 -b new 이다.

>> git checkout -b mybranch U-Boot-1_1_6
를 실행하면 U-Boot-1_1_6 의 TAG코드로 변경되고, mybranch가 생성되어 현재 사용되는 branch로 등록된다.

다시한번
>> git branch
를 실행하면 아래와 같은 화면이 보인다. 이번에는 메인 branch가 mybranch로 변경되었다.
>>   master
>> * mybranch

branch를 생성하긴 했는데, 코드를 다른 놈을 Base로 쓰고 싶단다. 그럼 어떻게 하나????
>> git reset --hard TAG
멋지다. 요렇게 하면 마음대로  Base코드도 바꿀 수 있다.

근데... 요렇게 작업하다가 master로 돌아가고 싶으면???? 
음... 요기까지는 아직 검토안해봤다. Branch의 이동명령...  왠지 그런 것도 될 것만 같은...

쩝... 암튼.. 겁나 편한 거 같기는 한데 아직은 잘 모르겠다.

Commit이랑 History관리 등등은... 기약없이 다음으로 .....

더 자세한 사항은 http://git-scm.com/ 의 Document를...



cf) 마음껏 퍼가셔도 됩니다.
출처 및 댓글 남겨주시면 감사하고, 것도 여의치 않으면...
그동안, 그리고 앞으로 내가 저지를 행동들이 있기에  ^____________^
Posted by 알 수 없는 사용자
이전버튼 1 이전버튼