코스털리츠 교수 강연 [고등과학원 석좌교수] by 바죠

고등과학원 11월 25일 저녁 7시
2016년 노벨 물리학상 수상자 코스털리츠 교수 강연

http://home.kias.re.kr/MKG/h/nobelist/
Copyright 2012(c) Korea Institute for advanced Study(KIAS). All rights reserved. 85 Hoegiro, Dongdaemun-gu, Seoul 02455, Republic of Korea [Admin]

git 명령어 [작업 중심으로 본 명령어들의 조합과 그 실행 순서] by 바죠

--------------------------------------------------------------------
git 사용의 중요성:
많은 공개된 프로젝트들이 소스코드를 관리하기 위해서 git 을 활용하고 있다.
여러 사람들과 공동으로 프로젝트를 수행하기 위해서는 소스코드 자료 저장 체계가 필요하다.
개인적 개발과 개발본에 대한 분산 저장이 가능하다.
물론, 공유없이 개인적인 개발 활동에도 도움이 된다.
유사한 프로그램들이 많이 있어왔지만, 최근 가장 많이 활용되는 것이 git 이다.
자료 백업에 대한 두려움 없이 새로운 시도와 개발을 해 볼 수 있다.
사실상 같은 작업 디렉토리에서 새로운 시도를 별도의 백업 작업없이 진행될 수 있다.
간단한 명령어로서 자동 백업이 이루어진다.
원본과 새로운 시도가 있는 변화본에 대한 명백한 차별을 제시하고 각각의 보관을 허용한다.
물론 언제든지 원하는 버전을 볼 수 있고 작업할 수 있다.
또한, 버전과 버전 사이의 차이점을 뚜렸하게 확인할 수 있다.
bitbucket, github 와 같은 웹 서비스 호스팅 싸이트들이 있어서
git 의 특징을 잘 반영하여 변경된 파일의 내역을 잘 제시해준다.

git 의 특징:
- 2005년 개발
- 빠른 속도
- 단순한 구조
- 비선형적인 개발 지원 (동시 다발적 브랜치 생성 허용)
- 완벽한 분산 지원
- 리눅스 커널 개발같은 대형 프로젝트에 유용

--------------------------------------------------------------------

git 명령어 중에서 가장 기본이 되는 것은 아래의 두 가지이다.
git add .
git commit  -m "20161115" 
이 두 가지 명령어가 파일을 수정한 후에 진행하는 기본적인 명령어들이다.
모든 변화에 대해서 이렇게 중간 중간에 저장을 수행한다.
이것을 가정할 때, 실제 상황에서 일어나는 일들을 명령어 중심으로 살펴 보았다.
git 기본 개념을 가지고 있는 상황에서는 결국 연속적으로 연결되는 명령어 요약이 가능하다.
git 기본 개념은 아래의 URL에서 확인 할 수 있다.
http://incredible.egloos.com/7136780


--------------------------------------------------------------------
처음 등록 사항 및 버전 체크
git --version
git config --global user.name "A Def "
git config --global user.email "
adef@gmail.com"

vi 대신에 emacs를 에디터로 사용할 경우:
git config --global core.editor emacs


git config -- list
git help config
git config --help
git add --help

실질적인 시작 단계 (기존의 파일들이 있는 경우)
git init

기존의 파일들이 있는 경우, git 을 시작함.

또 다른 형식의 시작
기존의 URL 로부터 시작하기
git clone
완전한 버전 역사를 복제하는 것.

ls -la
git -rf .git     
git 연관 작업을 하지 않고 싶을 때, git status 명령어를 사용한다.
더 이상 파일들을 트랙킹하지 않는다.

git status
새로운 것, 변화된 것
파일들이 tracked 인지, untracked 인지 현재 상황을 알려준다.
vi .gitignore
해당 파일들 리스트를 파일 속에 작성해 준다.
git 프로그램으로 관리하고 싶지 않은 파일들 정리해 준다.

git status
파일들의 변화를 체크하기 위한 명령어
git diff
트랙되고 있는 파일들에 대한 변화를 체크함.
파일 수정후, 기존의 스테이징 된 파일과 비교함.
git add filename
git diff --cached
 
이미 커미트한 상태에서 비교 사항을 보고 싶을 경우.

git log
변화의 역사, 커미트 역사 (현재의 브랜치에 제한 된 것)

git log -p
각 커미트의 diff를 보여준다. 즉, 적용된 패치를 보여준다.
git log -p -1
git log -p -2

git log --stat
git log --shortstat
git log --name-only
git log --name-status




git add -A   [git add *.html 또는  특정 파일 이름, git add filename]
git status
git add .gitignore
git status

--------------------------------------------------------------------
git reset filename
git status
git reset
git reset --hard
전체를 되돌리고 싶을 때, staging area에서 빼고 싶을 때
git reset filename
언스테이징, 파일 보존
git status

git revert HEAD
git revert $id

git commit -m "Initial"
working directory, staging area 를 넘어서 최종적으로 저장되는 상태를 얻어냄.  .git  디렉토리에 저장
git status
git log

외부 URL로 부터 프로그램과 깃 작업 사항들을 가져오기.
git  clone  URL   where_to_clone
또는 cp 명령어 처럼 사용될 수도 있다. 디렉토리, 디렉토리 복사와 같은 양식으로도 사용 가능함.
git clone ~/existing/repo  ~/new/repo

ls -la

git remote -v
git branch -a
$ git remote
$ git remote add pb
https://github.com/paulboone/ticgit
$ git remove -v

git diff
git status
git add -A
git status
git commit -m "abc"

git push origin master
외부 장치에 보관하기, 업로드

--------------------------------------------------------------------
git branch divide
git checkout divide
작업 준비 완료, 새로운 브랜치 생성 그리고 새로운 일 작업 준비 완료
git branch   로컬 브랜치 상황
git status
로컬 디렉토리, 파일들의 변화
작업 수행
git add -A
git commit -m "divide"
브랜치에서 작업 완료 상황
git push -u origin divide
브랜치 완료 작업, 원격 저장
git branch -a

git checkout master
git pull origin master
가져오기
git merge divide
합치기, master 본에 합치기
git push origin master
master 본 원격 저장
git branch -- merged
git branch -d divide
브랜치 지우기, 로컬
git branch -a
git push origin --delete divide
브랜치 지우기, 원격
git branch -a


아래의 명령어들로 머지 상태를 체크할 수 있다.
git branch --merged
git branch --no-merged

--------------------------------------------------------------------
git branch subs
git checkout subs
새로운 브랜치, 작업 준비 완료
git status
git add -A
git commit -m "subs"
작업 완료
git push -u origin subs
원격 저장
git checkout master
git pull origin master
git merge subs
합치기
git push origin master
working directory
staging area
.git directory

git add -A
git status
git add .gitignore
git add -A
git status

git reset fname
git status
git reset

git commit -m "initial"
git status
git log

git clone URL where_to_clone
git remote -v
git branch -a
git diff
git status
git add -A
git status
git commit -m "mul"
git push origin master

git branch divide
git branch
로컬 브랜치 목록
git checkout divide
git status
git add -A
git commit -m "div"
git push -u origin divide
git branch -a
git checkout master
git pull origin master
git branch --merged
git merge divide
git push origin master
git branch --merged
git branch -d divide
git branch -a
git push origin --delete divide
git branch -a
    

text changes
version 1, version 2, version 3

distributed version control
open source
github 2008


git rebase -i --root
git rebase -i --root
pick --> r

git rebase -i HEAD~2
pick --> s
commit message 를 수정함.
두 개의 commit를 하나의 commit으로 병합

git rebase -i HEAD~
git reset HEAD~

git branch
상태 체크
git branch dev1
git branch

rebase, merge
git checkout dev1

git checkout master
git merge dev1

git checkout dev1
git checkout master
3way merge
git merge dev1
충돌발생

git reset --soft HEAD^

git --version
git init
ls -a
git status
git add .
git status
git commit -m "ad"


git branch abc
git status
git checkout abc
git status
git add .
git commit -m 'abc'
git status

git remote add origin https://github.com/abcc.git
git pull origin master
git status

master
test
develop
feature1, feature2

              
 

git checkout -b newfeature
git branch -a
git commit -am "newfeature"
git push origin newfeature
git branch -a

git checkout master

git branch
git merge newfeature
git branch

git branch -d newfeature
git branch -a
git status
git push origin :newfeature
git branch -a

              

gti branch br1
git checkout br1
.....

git checkout master
git status
git merge br1

http://incredible.egloos.com/7136780
https://www.youtube.com/watch?v=HVsySz-h9r4


--------------------------------------------------------------------
3 가지 종류의 취소들:

1  git reset --soft HEAD~
커미트 상태만 변경하고자 함. 즉, 언커미트 상태로 변경

2  git reset --mixed HEAD~
언커미트 수행 그리고 언스테이지 수행

3  git reset --hard HEAD~
완전히 취소

--------------------------------------------------------------------
git branch
git branch develop
git branch

git checkout develop
작업, add, commit
이 변경된 부분만 다른 경우, master 와 merge 시킨다. fast-forward 방법
git checkout master   
git merge develop

이러한 머지 방법을 fast forward merge 방법

또 다른 merge 방법이 하나 더 있다.
3-way merge 방법 (공통, 하나, 또 다른 하나, 이렇게 3가지가 가능하다.)

git checkout develop
파일을 수정함. add, 커미트 함
git checkout master
동일한 파일을 수정함, add, 커미트 함
이렇게 변경사항들이 독립적으로 이루어진 변경이 분리된 상태에서 합칠 때,
충돌 발생함.

git merge develop
이러한 시도에서, 충돌이 발생함, 충돌 내용을 알려줌.
해당 파일을 vi 로 수정함. 사용자가 직접 차이점을 확인하고 파일을 수정함. add, commit 수행함.
git add  filename
git commit -m "solve the confliction"
머지가 이루어짐.

git checkout develop
헤드를 옮김
git merge master
이것까지 하게 되면, master, develop 이 모두 다 같은 해쉬를 가지게 된다.
git log

커밋 역사를 한 줄로 바꿀 때, 관리하고 자 할 때,  rebase 한다.
git checkout master
파일 수정
git checkout develop
파일 수정
git rebase master
리베이스 완성 후, 다시 fast-forward 머지를 아래와 같이 시도함.
git checkout master
git merge develop

합치는 것은 rebase, merge 두 가지가 있다.
merge 는 다시 fast-forward 그리고 3-way 두 가지로 나눌 수 있다.  

git branch --merged
머지된 브랜치 리스트
이 리스트에 나타난 브랜치 중에 필요 없으면 지울 수 있다.
git branch -a
명령어로 브랜치를 체크할 수 있다.
git branch -d dele
git push origin --delete dele
git branch -a
명령어로 브랜치 리스트를 중간에 체크할 수 있다.

--------------------------------------------------------------------
한 브랜치에서 작업을 중단하고 (예를 들어, add, commit 하지 않은 상태),
더 급한 일을 하려고 다른 브랜치로 갈아 탈 때,
git stash
명령어를 사용한다.
git stash list

시간이 지난후에 그 때의 일을 하려고 할 때,
git stash apply
명령어를 사용할 수 있다.
stash 하지 않고, 다른 브랜치로 checkout을 실행하면, 변경된 내용이 checkout하는 브랜치로 따라서 오게 됨.
이러한 불편함을 제거하기 위해서는 stash 를 사용한다.

--------------------------------------------------------------------
rebase the current branch onto <base>,
<base> : branch, commit id, tag,  relative HEAD

/md.egloos.com/img/eg/icon_file.gif") no-repeat left; list-style: none; padding: 0px 0px 0px 15px;' href="http://pds21.egloos.com/pds/201611/26/11/atlassian_git_cheatsheet.pdf" player="0">atlassian_git_cheatsheet.pdf
커미트 역사, 커미트 메시지 조작:

git rebase -i  HEAD~3
마지막 3개를 인터렉티브로 리베이스

git rebase -i  --root
리베이스 할 수 있는 상황이 된다.
커미트 순서를 변경할 수 있다.

메시지도 변경할 수도 있다.
git  rebase -i  --root
pick --> r
로 변경
저장 종료
각각 메시지를 에디터로 수정할 수 있다.

--------------------------------------------------------------------
두 개의 커미트를 합치는 방법

git rebase -i HEAD~2
두 번째만 pick --> s
변경해줌.
저장 종료.
해당 메시지를 새롭게 저장해줌. 하나의 메시지로 저장해 줌.

--------------------------------------------------------------------
한 줄의 커미트를 두개로 만들기
리베이스는 기본적으로 커미트 역사 바꾸기이다.

c1 --  c2  --  c4
         
         c2  --  c5


c1 -- c2 -- c4 -- c3 -- c5
새로운 역사
브랜치 없는 것처럼 하는 것이 리베이스

커미트 역사를 바꾸기 때문에 리베이스는 퍼브릭 브랜치에서는 사용자제해야함.
국소적으로 사용할 때는 유용한 것임.

git rebase -i HEAD~
pick --> e

저장 종료.
git reset HEAD~
git add file
git commit -m "add"
git rebase --continue



--------------------------------------------------------------------
mkdir abc
cd abc
git init

git branch 라는 명령어를 사용하지 전에 만들어진 브랜치를 mater 브랜치라고 명한다.
여러 개의 브랜치를 만들어서 여러 가지 일을 시도 해 볼 수 있다.

git mergetool

기술 이전 전후 by 바죠

기술이전 전후에 관한 기사가 나왔다.

핫이슈인 배터리에 관한 내용이다.

여기에서 시작하여

현재 상태에 이르렀다고 합니다.

도대체 무엇이 잘못 되었나요?

소위 대학교수들이 발표하는 논문을 믿었던 사람들이 잘못한 것인가요?

1600억 매출이 가능하다고 학교에서 말했었는데, 그것을 그대로 믿었던 사람이 잘못한 일이 되었습니다.


"유니스트는 자신들이 개발한 리튬 2차전지 음극 소재는 흑연보다 용량을 3배 이상 늘릴 수 있고 가격은 kg당 20달러 이하로 낮출 수 있어 대량합성이 가능하다고 강조했다. 때문에 이 '획기적 기술'로 상용화하면 2016년에 1400억원의 매출을 거둘 수 있다고 자신했다."




SACADA [carbon allotropes] by 바죠

SACADA- Samara Carbon Allotrope Database
http://sacada.sctms.ru/



탄소
동소체, 특히, 3차원 형식을 가지는 동소체들에 대한 데이터베이스이다.

너무나 많은 가능성을 가지고 3차원 구조체를 형성하는 탄소에
대한 구조들이 정리되어 있다.

실로 많은 경우, 부족한 구조 정보 때문에, 동일한 결정구조를 가지고 여러 편들의 논문들이 발표가
되었다.

사실, 정리되고 공유될 수 없는 데이터를 취급할 경우, 이미 알려진 구조를 새로운 구조로 오인할 수
있다.

Roald Hoffman, A.A. Kabanov, A.A. Golov, D.M.Proserpio, Angew. Chem. Int. Ed., 2016, 55,
10962-10977
doi: 10.1002/anie.201600655

https://en.wikipedia.org/wiki/Roald_Hoffmann




1 2 3 4 5 6 7 8 9 10 다음