SourceTree: http://www.sourcetreeapp.com
Kaleidoscope: http://www.kaleidoscopeapp.com
먼저 Kaleidoscope를 설치하고 아래와 같이 git 연동 설정을 한다.
그 다음, 아래 스크립트를 /usr/local/bin에 설치하고, 실행권한을 부여한다.
ksdiff-gitcommits
마지막으로, SourceTree에서 스크립트를 수행하는 Action을 추가한다.
이제, SourceTree에서 커밋들을 다중선택한다음 Custom Action > Diff Commits 를 수행한다.
끝.
2년만에 블로깅한다는게 이런 거라니... ㅠㅠ
실제로 쓰일 일은 극히 드물겠지만, Objective-C Runtime API를 이용하여 클래스를 생성할 수 있다.
다음의 코드는 어떤 클래스를 Runtime에서 복사하는 코드의 예제이다.
#include <objc/runtime.h>
+ (Class)copyClassWithName:(const char *)aClassName
{
Class sClass;
Ivar *sIvars;
Method *sMethods;
unsigned int sCount;
unsigned int i;
sClass = objc_allocateClassPair([self superclass], aClassName, 0);
sIvars = class_copyIvarList(self, &sCount);
for (i = 0; i < sCount; i++)
{
NSUInteger sSize;
NSUInteger sAlign;
NSGetSizeAndAlignment(ivar_getTypeEncoding(sIvars[i]), &sSize, &sAlign);
class_addIvar(sClass, ivar_getName(sIvars[i]), sSize, sAlign, ivar_getTypeEncoding(sIvars[i]));
}
free(sIvars);
sMethods = class_copyMethodList(self, &sCount);
for (i = 0; i < sCount; i++)
{
class_addMethod(sClass, method_getName(sMethods[i]), method_getImplementation(sMethods[i]), method_getTypeEncoding(sMethods[i]));
}
free(sMethods);
objc_registerClassPair(sClass);
return sClass;
}
이 예제 코드는 instance variable과 instance method만 복사하고 있다. 만약, 완벽한 복사를 원한다면, class method, property, protocol에 대해서도 비슷한 작업을 해줘야 한다.
지금까지 아무 불편함없이 잘 쓰고 있던 subversion대신에 새로운 마음으로 git을 한번 써보기로 했다.
Mac OS X에서 git소스를 받아 설치하는 것은 전혀 어려운 일이 아니었다. 하지만, 사용 중 manpage가 하나도 설치되어 있지 않은 것을 보고 확인해 보니 git소스를 빌드할 때 manpage는 기본적으로 설치하지 않는단다. 허허... 이런 일이...
고작, manpage하나 설치하는데, 이런 삽질을 하게될 줄은 전혀 몰랐다. 아래는 삽질의 정리된 결과물...
asciidoc-8.5.2 설치
다운로드: asciidoc-8.5.3.tar.gz
./configure make sudo make install
gettext-0.17 설치
아래의 getopt를 빌드할 때 libintl가 필요한데, libintl은 여기에 포함되어 있다.
다운로드: gettext-0.17.tar.gz
./configure make sudo make install
getopt-1.1.4 설치
아래의 xmlto를 빌드할 때 getopt가 필요하다.
다운로드: getopt-1.1.4.tar.gz
make LDFLAGS=-lintl sudo make install
docbook xml/xsl 설치
xmlto를 빌드할 때와 git manpage를 빌드할 때 필요하다. 에휴...
sudo mkdir -p /usr/local/share/docbook sudo mkdir -p /usr/local/etc/xml cd /usr/local/share/docbook sudo wget http://surfnet.dl.sourceforge.net/sourceforge/docbook/docbook-xsl-1.75.2.tar.bz2 sudo wget http://www.oasis-open.org/docbook/xml/4.2/docbook-xml-4.2.zip sudo wget http://www.oasis-open.org/docbook/xml/4.5/docbook-xml-4.5.zip sudo tar xjf docbook-xsl-1.75.2.tar.bz2 sudo unzip docbook-xml-4.2.zip -d docbook-xml-4.2 sudo unzip docbook-xml-4.5.zip -d docbook-xml-4.5 sudo rm docbook-xsl-1.75.2.tar.bz2 sudo rm docbook-xml-4.2.zip sudo rm docbook-xml-4.5.zip sudo xmlcatalog --noout --add nextCatalog '' file:///usr/local/share/docbook/docbook-xsl-1.75.2/catalog.xml --create /usr/local/etc/xml/catalog sudo xmlcatalog --noout --add nextCatalog '' file:///usr/local/share/docbook/docbook-xml-4.2/catalog.xml --create /usr/local/etc/xml/catalog sudo xmlcatalog --noout --add nextCatalog '' file:///usr/local/share/docbook/docbook-xml-4.5/catalog.xml --create /usr/local/etc/xml/catalog sudo ln -s /usr/local/etc/xml /etc/xml
xmlto-0.0.23 설치
이제 마지막으로 xmlto를 빌드한다.
./configure GETOPT=/usr/local/bin/getopt make sudo make install
git-1.7.0.5 설치
드디어 원하는 것이다.
./configure make sudo make install make man sudo make install-man
정말 오랜만의 블로그 포스팅이 이런 삽질의 결과물일 줄이야...


