우아한테크코스 프리코스 미션들을 복습하고 있었다.
그러던 와중에, 해당 미션들을 저장하는 branch를 실수로 main
에 저장하고 있었다.
그래서 이전에 만든 repository 기존 branch을 새로운 repository(저장소)를 만들어서 새 branch에 가져오기(복사하기)로 했다.
즉, old repository의 branch -> new repository의 branch로 복사하는 것이다.
(기존 branch main
-> 새 branchfancy-log2
으로 복사하기)
기존 repository명을 old-java-bridge-review
이고, branch명은 main
이다.
새로운 repository명을 new-java-bridge-review
이고, 새 branch명은 fancy-log2
이다.
나는 내 기존 repository에 있는 branch를 가져오는 걸로 했다. (상대방 repository에서 가져오는 방식도 같다)
나는 IntelliJ에서 제공하는 terminal에서 작업했다.
기존 branch를 복사하기 위해서는 새 branch(fancy-log2)에서 작업해야 한다.
따라서, 새 branch인 fancy-log2
를 먼저 추가해준다.
상대방(혹은 나)의 repository에 있는 기존 branch를 저장하는 새 branch를 추가한다.
나는new-java-bridge-review
repository에서 새 branch명 fancy-log2
를 만든다.
git checkout -b [새 브랜치명]
위의 코드를 해석하면,
새로운 branch를 만들고 나서 동시에 새로운 branch에 이동이 된다는 의미다.
깃 레포지토리 링크
-> 리모트명
에 저장
git remote add <리모트명> <깃 레포지토리 링크>
git remote add fancy-log2-remote http://github.com/fancy-log/old-java-bridge-review.git
Git
을 클릭하면 위와 같이 remote명 fancy-log2-remote
가 추가된 것을 볼 수 있다.git pull <remote명> <remote의 branch명>
위의 코드를 해석하면,
2번에서 git repository 링크를 저장한
리모트명에 있는 branch(main)를 new-java-bridge-review
repository의 branch fancy-log2
에 저장한다는 의미이다.
그러면 기존 repository 있던 branch(main) 안에 있는 코드와 히스토리가 새 repository branch(fancy-log2)에 복사된다.
[추가 설명]
git pull 을 해주면 현재 사용하고 있는 branch(fancy-log2) 에 remote 되어 있는 특정 branch를 pull 해오게 된다.
Git
을 클릭하고 해당 branch fancy-log2
를 클릭하면 커밋 내용과 코드가 복사되었다는 것을 확인할 수 있다.GitHub 계정과 commit 이메일 계정이 동일하거나
commit이 Fork한 repository가 아닌 나만의 repository에서 이루어져야 한다
[1] 일단 내 git hub에 새로운 레파지토리를 만든다.
[2] terminal을 연다.
[3] 복사하고자 하는 repository를 bare clone한다.
$ git clone –bare https://github.com/exampleuser/old-repository.git
[4] 새로운 레파지토리로 Mirror-push
$ cd old-repository.git
$ git push –mirror https://github.com/exampleuser/new-repository.git
[5] 처음에 임시로 생성했던 local repository를 삭제
$ cd ..
$ rm -rf old-repository.git
fork 해온 repository 잔디 심는 방법 : repository 복사해오기 duplicate the repository
Set : 중복을 허용하지 않은 자료구조이다.
리스트를 Set으로 변환해서 크기를 비교한다.
크기가 달라졌으면 리스트에 중복된 요소가 있었다는 것을 의미한다.
@DisplayName("중복인지 확인")
@Test
void DuplicateTest() {
List<Integer> userDuplicate = Arrays.asList(1,1,2,3,4,5);
// Set 으로 변환
Set<Integer> userNoDuplicate = new HashSet<>(userDuplicate);
if(userNoDuplicate.size() != userDuplicate.size()) {
System.out.println("중복된 요소가 있습니다.");
System.out.println("전체 개수는 " + userDuplicate.size()); // 6개
System.out.println("중복되지 않은 개수는 " + userNoDuplicate.size()); // 5개
}
}
try {
예외가 발생할 가능성이 있는 실행문
}catch (Exception 클래스명 e){
예외 처리문
}
try 블록에 실제 실행되어야 하는 코드가 들어가며 Exception이 발생할 가능성이 있는 코드가 들어간다.
catch 블록에는 Exception이 발생하면 실행되는 코드가 들어갑니다. 즉 예외 처리를 하는 코드다.
throw
: 개발자가 의도적으로 예외를 발생시키는 것이다.
throw라는 키워드를 이용하며, 주로 비즈니스 로직을 구현하는 과정 중 컴파일에는 문제가 없지만 해당 비즈니스 로직이 개발자가 의도한 대로 통과하지 못했을 경우 고의로 예외를 발생시켜야 할 때 사용한다.
다음 예시는 숫자가 아닌 경우 혹은 3미만 20 초과인 경우 예외를 발생시키는 경우다.
여기서 min은 3, max는 20을 의미한다.
예외가 발생하면, IllegalArgumentException()으로 처리된다.
IllegalArgumentException()
: 적합하지 않거나(illegal) 적절하지 못한(inappropriate) 인자를 메서드에 넘겨주었을 때 발생합니다.
이처럼 throw
키워드를 사용하면 개발자의 판단에 따라 강제로 예외를 발생시킬 수 있다.
throws
: 메서드 내에서 예외 처리를 하지 않고 해당 메서드를 사용한 곳에서 예외 처리를 하도록 예외를 다른 곳으로 던지는 것이다.
즉, 예외를 전가시키는 것이다.
public class Test {
public static void main(String[] args) {
int a = 2;
int b = 0;
try {
divide(a,b);
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
public static int divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("0으로 나눌 수 없습니다.");
}
return a / b;
}
}
여기서 divide 메서드는 예외를 자신이 처리하지 않고 throws 키워드를 통해 자신을 호출한 main 메서드에게 책임을 전가했다.
이 divide 메서드를 호출한 main 메서드에서 try catch 문을 통해 예외 처리를 진행했다.
정리하자면,
throw는 강제로 예외를 발생시키는 것이며, 개발자의 의도에 따라 강제로 예외를 발생시킬 수 있고, throws는 자신을 호출한 메서드에게 책임을 전가하여 호출한 메서드에서 예외 처리를 하도록 강요하는 것이다.
제목과 분문을 빈 행으로 구분한다.
제목을 50글자 내로 제한한다.
제목 첫 글자는 대문자로 작성한다.
제목 끝에는 마침표를 넣지 않는다.
제목은 명령문을 사용하며 과거형을 사용하지 않는다.
본문의 각 행은 72글자 내로 제한한다.
어떻게 보다는 무엇과 왜를 설명한다.
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
feat
(feature) : 새로운 기능 추가
fix
(bug fix) : 버그 수정
docs
(documentation) : 문서 관련 내용
style
(formatting, missing semi colons, …) : 스타일 변경
refactor
: 코드 리팩토링
test
(when adding missing tests) : 테스트 관련 코드
build
: 빌드 관련 파일 수정
ci
: CI 설정 파일 수정
perf
: 성능 개선
chore
(maintain) : 그 외의 수정
명령형 현제 시제를 사용해야합니다. -> changed, changes가 아닌 change를 사용❗
첫 글자는 대문자가 아닌 소문자로 사용합니다.
문장 끝에 마침표(.)를 붙이지 말아야 합니다.
명령형과 현제 시제를 사용해야합니다.
변화에 대한 이유와 이전코드와 이후 코드의 차이점을 포함시켜야 합니다.
모든 주요 변경 사항
변경 사항에 대한 설명 (description of the change)
변경사유 (justification)
마이그레이션 참고 사항 (migration notes) 과 함께 footer에 언급되어야 합니다.
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
Closes #<이슈번호>
와 함께 기록해야합니다.이슈가 하나인 경우
Closes #234
이슈가 여러개인 경우
Closes #123, #245, #992
feat($browser): onUrlChange event (popstate/hashchange/polling)
Added new event to $browser:
- forward popstate event if available
- forward hashchange event if popstate not available
- do polling when neither popstate nor hashchange available
Breaks $browser.onHashChange, which was removed (use onUrlChange instead)
fix($compile): couple of unit tests for IE9
Older IEs serialize html uppercased, but IE9 does not...
Would be better to expect case insensitive, unfortunately jasmine does
not allow to user regexps for throw expectations.
Closes #392
Breaks foo.bar api, foo.baz should be used instead
feat(directive): ng:disabled, ng:checked, ng:multiple, ng:readonly, ng:selected
New directives for proper binding these attributes in older browsers (IE).
Added coresponding description, live examples and e2e tests.
Closes #351
style($location): add couple of missing semi colons
docs(guide): updated fixed docs from Google Docs
Couple of typos fixed:
- indentation
- batchLogbatchLog -> batchLog
- start periodic checking
- missing brace
feat($compile): simplify isolate scope bindings
Changed the isolate scope binding options to:
- @attr - attribute binding (including interpolation)
- =model - by-directional model binding
- &expr - expression execution binding
This change simplifies the terminology as well as
number of choices available to the developer. It
also supports local name aliasing from the parent.
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.