테스크 코드를 실행할 때 자바/스칼라 메모리가 부족할 수 있다.


sbt의 경우에는 아래와 같이 사용할 수 있다.


javaOptions ++= Seq("-Xms512M", "-Xmx2048M", "-XX:MaxPermSize=2048M", "-XX:+CMSClassUnloadingEnabled")




메이븐(maven)의 경우는 3가지 방식으로 사용할 수 있다 .(아래 참조)
https://maven.apache.org/configure.html


주로는 다음과 같은 방식을 사용한다.

export MAVEN_OPTS="-Xms512M -Xmx32048M"











Posted by 김용환 '김용환'



기존 로컬 브랜치를 리모트를 새로운 브랜치로 생성하고 푸시된 기존 브랜치는 삭제하는 예이다. 




$ git branch -m features/bug_fix GOOGLE-539_bug_fix



$ git push --set-upstream origin GOOGLE-539_bug_fix

Total 0 (delta 0), reused 0 (delta 0)

To https://github.com/samuel-kim/google-search.git

 * [new branch]      GOOGLE-539_bug_fix -> GOOGLE-539_bug_fix

Branch GOOGLE-539_bug_fixset up to track remote branch GOOGLE-539_bug_fix from origin.



삭제할 때는 push origin  다음에 삭제할 브랜치 앞에 :을 추가해야 한다.


$ git push origin :features/bug_fix

To https://github.com/samuel-kim/google-search.git

 - [deleted]         bug_fix



Posted by 김용환 '김용환'

[git] 공커밋

etc tools 2017.11.10 15:42



github 페이지가 잘 동작하다가 404 에러가 나는 경우가 있다. 

이 때는 공 커밋을 하나 날리고 push하면 된다. 


$ git commit -m 'rebuild pages' —allow-empty

$ git push




Posted by 김용환 '김용환'



사용자 정의 maven jar를 사내 repository으로 업로드해야 할 떄 pom.xml을 굳이 고칠 필요가 없다. 간단히 아래와 같은 예제로 실행하면 사내 repository에 업로드(deploy)할 수 있다. 



$ mvn package 

// 성공


$ ls target/original-phoenix-0.0.1-SNAPSHOT.jar

original-phoenix-0.0.1-SNAPSHOT.jar



$ mvn -X deploy:deploy-file -DgroupId=com.google.phoenix -DartifactId=phoenix-core -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=target/original-phoenix-0.0.1-SNAPSHOT.jar -Durl=http://maven.google.com/content/repositories/phoenix-snapshot



다음 주소에 확인하면 잘 올라갔는지 볼 수 있다 .


http://maven.google.com/content/repositories/phoenix-snapshot/com/google/phoenix/phoenix-core/0.0.1-SNAPSHOT/maven-metadata.xml



Posted by 김용환 '김용환'

intellij에서 scala App을 실행할 때 다음과 같은 에러가 발생할 수 있다. 


Error: scala: No 'scala-library*.jar' in Scala compiler library in test



Open File -> Project Structures -> Libraries(또는 맥이라면 cmd + ;를 누름) 화면에서 scala sdk를 삭제한다. 


그리고 코드 화면으로 넘어가면 scala setup을 해야 한다는 경고창이 코드 뷰 상단에 뜨는데. scala setup 버튼을 누르면 잘 동작한다. 



이렇게 잘 안되면..


Open File -> Project Structures -> Libraries(또는 맥이라면 cmd + ;를 누름) 화면에서 scala sdk를 삭제하고 +를 눌러 수동으로 scala sdk를 선택한다.



### 추가 2017.11

그래도 안되면...버그다.



build.properties에 보니 sbt.version=1.0.2로 되어 있다.

검색해보니. sbt 버그였나 보다.


https://github.com/sbt/sbt/issues/3560

https://youtrack.jetbrains.com/issue/SCL-12591


sbt를 1.0.3으로 변경하고 build.properties의 sbt.version을 1.0.3으로 수정하니 문제가 발생하지 않는다. (또는 0.13.16으로 변경해야 할듯..)


Posted by 김용환 '김용환'


intellij에서 sbt 컴파일 중에 에러가 발생했다. 


[error] java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: sbt/internal/librarymanagement/GetClassifiersModule



최신 버전으로 intellij를 업데이트하면 문제가 해결된다.

Posted by 김용환 '김용환'


3개의 커밋을 하나로 합쳐본다.



$ git log --pretty=oneline

aae3f8afa5c7e97d8974525994f100b93258baf3 commit 3

2c24df186d7b779a87882e0968503fb019866d62 commit 2

ae08eead7cf187b85fd73d5a2ceb3f0a256c99b1 commit 1


3번 commit/push했고 이를 하나의 commit 메시지로 만들고 싶을 때 사용할 수 있는 git 커맨드를 소개한다. 



최신 3개의 commit을 rebase로 하나로 합쳐 본다. -i는 대화형 모드를 의미한다. 


$ git rebase -i HEAD~3

  

pick ae08eea commit 1

pick 2c24df1 commit 2

pick aae3f8a commit 3


# Rebase acf9816..aae3f8a onto acf9816 (3 command(s))

#

# Commands:

# p, pick = use commit

# r, reword = use commit, but edit the commit message

# e, edit = use commit, but stop for amending

# s, squash = use commit, but meld into previous commit

# f, fixup = like "squash", but discard this commit's log message

# x, exec = run command (the rest of the line) using shell

# d, drop = remove commit

#




아래와 같이 수정한다. 

commit 1은 그대로. commit 2와 commit 3의 pick을 squash또는 s로 변경한다. 


pick ae08eea commit 1

squash 2c24df1 commit 2

squash aae3f8a commit 3


# Rebase acf9816..aae3f8a onto acf9816 (3 command(s))

#

# Commands:

# p, pick = use commit

# r, reword = use commit, but edit the commit message

# e, edit = use commit, but stop for amending

# s, squash = use commit, but meld into previous commit

# f, fixup = like "squash", but discard this commit's log message

# x, exec = run command (the rest of the line) using shell

# d, drop = remove commit

#


저장하고 종료하면 squash 화면이 나타난다. 

여기에서 commit1 앞에 REDIS-1을 추가해본다. 


다음 화면이 나타나고 쉘로 나온다. 



 3 files changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 1

 create mode 100644 2

 create mode 100644 3

Successfully rebased and updated refs/heads/master.



3개의 commit이 하나의 commit으로 나타난다. 


$ git log --pretty=oneline

7dca124e20dea4a4248be52eae50081580ac329d REDIS-1 commit 1

acf9816e316d960df3a99c6bb9c0ee40ac31dee0 Initial commit



해당 commit을 확인해보면 commit 1, commit 2, commit 3 모두 존재한다.


$ git log -p 1

commit 7dca124e20dea4a4248be52eae50081580ac329d

Author: knight76@gmail.com

Date:   Tue Oct 24 19:27:43 2017 +0900


    REDIS-1 commit 1


    commit 2


    commit 3


diff --git a/1 b/1

new file mode 100644

index 0000000..e69de29




이미 remote repository에 저장했기 때문에 git push --force를 실행해서 서버에도 반영한다.






만약, push를 하지 않은 상태라면 git reset --soft HEAD~3 커맨드를 사용하면 된다. 



$ git log --pretty=oneline

13a9d0da6ebf8f0ab2d78761cd26bad3136c5cec commit 3

628a2b89c35e134aeccd0e26dc90dc78575f2493 commit 2

e8630d725e97f8f11e8036d303abe4812f956dea commit 1

acf9816e316d960df3a99c6bb9c0ee40ac31dee0 Initial commit


$ git reset --soft HEAD~3


$ git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)


new file:   1

new file:   2

new file:   3


$ git log --pretty=oneline

acf9816e316d960df3a99c6bb9c0ee40ac31dee0 Initial commit


$ git add .

$ git commit -m 'REDIS-1 commit 1'

[master a3eaa44] REDIS-1 commit 1

 3 files changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 1

 create mode 100644 2

 create mode 100644 3

$ git push


Posted by 김용환 '김용환'

[git] git reset hard

etc tools 2017.09.01 19:15


잘못 commit을 했지만 git 서버의 커밋된 버전을 이동하려면 다음과 같은 명령을 사용할 수 있다. 


먼저 로그 내용과 short hash 내용을 얻는다. 


$ git log --pretty=oneline --abbrev-commit

ab2cb94 XXFactoryBean 생성

12312414 ...




특정 commit으로 이동하려면 다음과 같이 사용할 수 있다.


git reset --hard ab2cb94




뒤 커밋으로 하나 이동하려면 다음 커맨드를 사용한다.


git reset --hard HEAD



3번째 뒤 커밋으로 이동하려면 다음 커맨드를 사용한다.


git reset --hard HEAD~3


git reset --hard HEAD^^^





Posted by 김용환 '김용환'


크롬에서 자동 리프레시가 되게 해주는 gulp livereload를 설치할 수 있다 

ctrl + f 누르지 않고도 데이터가 수정되자마자 사용자가 바로 바뀌어진 문서를 보게 할 수 있다. 





gulp 설치


$ npm install --save-dev gulp gulp-watch gulp-livereload

$ npm link gulp



gulpfile.js 파일


$ vi  gulpfile.js


var gulp = require('gulp');

var pug = require('gulp-pug');

var less = require('gulp-less');

var minifyCSS = require('gulp-csso');


gulp.task('html', function(){

  return gulp.src('client/templates/*.pug')

    .pipe(pug())

    .pipe(gulp.dest('build/html'))

});


gulp.task('css', function(){

  return gulp.src('client/templates/*.less')

    .pipe(less())

    .pipe(minifyCSS())

    .pipe(gulp.dest('build/css'))

});


gulp.task('default', [ 'html', 'css' ]);



gulp를 실행한다. 


$ gulp watch


[20:15:03] Using gulpfile ... gulpfile.js

[20:15:03] Starting 'watch'...



크롬에서는 livereload 플러그인을 실행한다. 



완료!




참고 : http://hochulshin.com/gulp-livereload-sample/

Posted by 김용환 '김용환'



* master 브랜치 기반의 PR(pull request) 



먼저 github 원격 저장소를 내 저장소로 fork한다. 


내 github 저장소를 origin, 원격 githubub 저장소를 real이라고 지정한다. 




# git clone https://github.com/samuel-kim/optools.git


# git remote add real https://github.com/cassandra/optools.git


# git remote -v


origin https://github.com/samuel-kim/optools.git (fetch)

origin https://github.com/samuel-kim/optools.git (push)

real https://github.com/cassandra/optools.git (fetch)

real https://github.com/cassandra/optools.git (push)




내 저장소의 master 브랜치를 기반으로 새로운 브랜치를 만든다. 


git checkout -b fix_errata


코드 수정하고 푸시한다. 


git add .

git commit -m 'fix errata'

git push origin




원격 github 웹 페이지에 접속하면 "Compare & pull reqeust"이 보인다.

어느 브랜치에 PR할지 결정한다. 


PR이 완료되면, master 브랜치로 이동한다.


git checkout master


기존 브랜치를 삭제한다. 


git branch -d fix_errata


리모트 브랜치를 삭제한다. 


git push origin --delete fix_errata



real의 master를 origin의 master에 merge한다. 즉 원격 github 저장소의 master에 머징된 내용(새로워짐)을 내 저장소의 master(구버전)로 병합한다. 


현재 origin master로 되어 있다. origin master(내꺼)를 기준으로 원본 real의 master(기준)의 내용을 rebase한다. 


$ git branch -l

* master


$ git rebase real/master



origin master에 push한다. 


git push origin origin/master





이미 origin 저장소의 브랜치로 checkout된 상태에서 

저 멀리 real 은 코드 푸시가 다량으로 일어날  있고, 시간이 지나면서 내 저장소인 origin과의 소스 커밋 차이가 발생한다.


그 때는 브랜치에서 다음 커맨드를 실행해 브랜치 상황을 살펴 본다.


git pull real



만약 master만 real 브랜치의 새로운 버전으로 다운받고 싶다면 다음 커맨드를 실행한다.


git pull real master


그리고 push하면 동일하게 맞춰진다. 


git push 





Posted by 김용환 '김용환'