[Git] 초간단 bash명령어 정리

Posted on 2021. 10. 7. 10:38
Filed Under Web Programming/개발환경

git config (user정보)

git clone (git site에서 clone url copy)

git branch -t origin/내브랜치 (개인용 branch사용하는 경우, remote에서 생성후 local로 당기기)

git branch -vv  (branch list 확인, remote 매핑 브랜치도 확인)

 

* Git 설치 및 커맨드창 실행
Git 설치:> Git-2.x.x-64.exe 설치 (/bin/bash.exe + git.exe + sh.exe 포함)
git_cmd창실행:> 탐색기에서 생성한 /workspace로 이동해서 Right-click > [Git Bash Here] 실행
└ 하면 command창이 실행됨.

config 확인:> git config --list
config 추가:> git config --global user.email "계정(보통 이메일사용)"
config 추가:> git config --global user.name "사용자명"
config 설정:> git config core.quotepath false (파일경로가 깨짐 방지, 이스케이프 문자 변환처리 OFF)

* Git branch 환경 
① 테스트용-배포용-branch = [dev]라는 가정
② remote/myBranch를 만들어서 작업한다.
③ 내 작업이 완료되면 remote/myBranch에 commit&push하고 [dev]에 merge한다.

repository생성&복사:> git clone http://ip:port/xxx.git ./prj-dir-name
├[로컬저장소]가 ./prj-dir-name 폴더가 됨.
├ git init (로컬저장소를 빈 Git 저장소로 초기화)
├ git remote add origin [URL] (로컬저장소에 원격 저장소(origin)를 추가)
└ git fetch origin master (원격 저장소의 master 브랜치 데이터를 로컬에 가져와 저장)
//fetch는 데이터를 로컬에 가져오기만 하고,
//pull은 원격 저장소의 내용을 가져와 자동으로 병합(merge)작업을 한다.

branch 목록:>git branch -a (-a는 모든 branch list)
* dev

branch 생성& git checkout -b [NewBranchName]
├ git branch [NewBranchName]   (branch 생성 )
└ git checkout [NewBranchName] ([NewBranchName] branch를 사용)

▼리모트 저장소 가져오기
git checkout -t origin/[리모트branch]   (-t: 브랜치 생성 및 가져오기)
└ branch를 못찾는 에러시 git fetch 후 재시도
git branch -vv (branch 목록조회, -v:마지막 커밋 메시지+현재가리키는 upstream-branch 표시

git branch --set-upstream-to (local저장소생성후 remote 저장소 향하도록 하기)

▼리모트 수정된내역 로컬로 업데이트
dev변경소스-업데이트①branch이동:> git checkout [NewBranchName]
리모트 저장소 정보 동기화:> git fetch origin dev
dev변경소스-업데이트②pull:> git pull origin dev 

dev변경소스-업데이트①branch이동:> git checkout dev
현재브랜치(dev)←[NewBranchName]를병합:> git merge [NewBranchName]

▼리모트 내용으로 복원
git reset --hard HEAD   (수정사항 무시하고 HEAD(또는 commit-id)로 이동)
git pull origin dev   (리모트/dev 브랜치 내용 가져오기)

▼삭제된 파일 가져오기
git checkout "대상파일명"   (파일 삭제후 실행)

..소스수정.. (현재branch=[NewBranchName])

▼commit&push
commit:> git commit -a -m "커밋코멘트"
├ git add .  (.는 변경된 모든 파일 의미 or 단건은 [xxx.java]로 파일명 지정)
└ git commit -m "커밋코멘트"
원격[NewBranchName]브랜치에push:> git push origin [NewBranchName]

▼git add 취소하기
>git restore HEAD [파일명] ([파일명]이 없으면 add한 모든 파일 취소)
또는
>git restore --staged [파일명] 

▼수정한 소스 마지막 커밋(or 체크아웃)으로 되돌리기
1)파일단위
$ git checkout -- {파일명}
2)전체
$ git reset --hard HEAD

▼ reset등을 수행하다가 untracked files이 쌓인경우
$ git clecn -f (디렉토리도 clean: -fd)
※주의: 작업중인 파일인 경우 백업할 것!

참고: https://hellvelopment.tistory.com/30


* 반복사용
git fetch --all
git checkout <개발공통 브랜치>
git pull
...(충돌시 메시지 출력되면 충돌파일: 로컬백업→restore→다시 git pull)...
git checkout <내 브랜치>
git merge dev
git push
---▼작업한것 커밋
git status
git add .
git commit -m "커밋메시지"
git push
---▼리모트: 브랜치 머지
<remote에서 개발공통에 내 브랜치 merge>
---▼로컬을 리모트브랜치와 동기화
git checkout <개발공통 브랜치>
git fetch --all
git pull
git checkout <내 브랜치>
git merge dev
git push

 

▼git log 조회

$ git show 0387827984a60338e77250716882d24ee7401263 --name-status
commit 0387827984a60338e77250716882d24ee7401263
Author: HAE\12223344 <aaa@hahaha.com>
Date:   Thu Jul 20 12:40:12 2023 +0900

    결제처리 우선순위 로직 수정

M       deploy/{site}/src/main/resources/sys-adm-kkk.properties
A       src/main/java/com/{sys}/adm/api/cmn/service/CmnService.java
M       pom.xml
 

 

 

반응형

[java] 자료형, x진수 표현법

Posted on 2021. 9. 18. 16:56
Filed Under Programming/Java

▼기본 자료형(primitive data type)

자료형의 표현범위는 [2의 N승 - 1] (부호 표현용 1비트 제외)

java - 기본 자료형(primitive data type)

 


public static void main(String[] args) {
	//▼정수(decimal)
	int num = 10;		// 10진수
	int bNum = 0B1010;	// 2진수(binary): 0B+XXXX (32비트중 앞자리는 자동0)
	int oNum = 012;		// 8진수: 0+XXXX
	int xNum = 0XA;		// 16진수: 0x+XXX        
	long lNum = 12345678900L; //뒤에 L(또는 l)을 붙여서 리터럴(literal)을 8바이트/long으로 지정
	
	//▼실수(real number) 
	// - 소수점 표현 방식에는 부동 소수점 방식(Floating-Point Number Representation, IEEE 754)
	//   과 고정 소수점 방식(Fixed-Point Number Representation)이 있음. java는 부동 소수점 방식.
	double dNum = 3.141592;	//실수 리터럴은 기본형이 double
	float fNum = 3.141592F;	//뒤에 F(또는 f)를 붙여서 리터럴을 4바이트/float형으로 지정
	
	System.out.println(num);
	System.out.println(bNum);
	System.out.println(oNum);
	System.out.println(xNum);
	System.out.println(lNum);
	System.out.println(dNum);        
	System.out.println(fNum);
}
---------------
Output:
10
10
10
10
12345678900
3.141592
3.141592

 


// 자바의 부동 소수점 오차 예시
// - 소수점 표현 방식에는 부동 소수점 방식(Floating-Point Number Representation, IEEE 754)
//   과 고정 소수점 방식(Fixed-Point Number Representation)이 있음. java는 부동 소수점 방식.
public void fixedPointDoubleError() {
	double dnum = 1;

	for(int i = 0; i<10000; i++) {
		dnum = dnum + 0.1;
	}
	System.out.println(dnum);
}
---------------
Output:
1001.000000000159

▼자바의 문자형

- 표현은 전세계 공통인 UNICODE, 인코딩 방식은 UTF-16 (2바이트)

반응형

crontab 스케쥴 설정값

Posted on 2021. 8. 29. 16:11
Filed Under LINUX+UNIX

초(0~59) ┃분(0~59) ┃시(0~23) ┃일(1~31) ┃월(1~12) ┃요일(0~6,0=일요일)

0 0 1 * * ?
:매일 새벽1시

0 0 18 14,24 * *
:매달 14,24일 18시에 실행

0 0 18 14-24 * *
:매달 14일 부터~24일 까지 18시에 실행

0 5,11 * * * 
: 새벽 5시와 밤 11시.

5 * * * * 
: 매시 5분이 될 때마다 실행. 즉, 한 시간 간격으로 실행.

0 5 * 1 * ?
: 매달 1일 새벽 5시에 실행.

#물음표(?): 일/요일에만 사용 가능. 특정값 없음. *과 동일.

 

Linux 서버 시간대 확인하기

// 간단히
[centos@ip-xx-xxx-xxx-xxx:/var/xxx] date
Fri Aug 25 00:56:31 UTC 2023

// 상세히 예시1) UTC    (한국은 UTC+9)
[centos@ip-xx-xxx-xxx-xxx:/var/xxx] timedatectl
      Local time: Fri 2023-08-25 00:57:27 UTC
  Universal time: Fri 2023-08-25 00:57:27 UTC
        RTC time: Fri 2023-08-25 00:55:16
       Time zone: UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

// 상세히 예시2) CST/CEST
[centos@ip-xx-xxx-xxx-xxx:/var/xxx] timedatectl
      Local time: Tue 2023-08-29 09:47:31 CEST
  Universal time: Tue 2023-08-29 07:47:31 UTC
        RTC time: Tue 2023-08-29 07:46:49
       Time zone: Europe/Berlin (CEST, +0200)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2023-03-26 01:59:59 CET
                  Sun 2023-03-26 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2023-10-29 02:59:59 CEST
                  Sun 2023-10-29 02:00:00 CET

 

참조

https://www.timeanddate.com/worldclock/converter.html (한국은 UTC+8, 유럽은 CET)

 

https://m.blog.naver.com/banffer/220678816019 (2016)

 

https://yangyag.tistory.com/358 [Hello Brother!]

https://iamfreeman.tistory.com/entry/crontab-사용법-알아보기-크론탭-옵션-스케쥴러

 

 

 
 
반응형

[java] HttpURLConnection - GET/POST

Posted on 2021. 8. 6. 13:23
Filed Under Programming/Java


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.codehaus.jettison.json.JSONObject;

//▼HTTP Reqeust GET/POST 샘플 코드
private String charsetName = "UTF-8";

//	Open API 호출 테스트 샘플
public String testGET() throws Exception 
{
	//JSONObject obj = new JSONObject();
	String baseUrl = "http://data.ex.co.kr/openapi/restinfo/restWeatherList?key=0759277880&type=json&sdate=20210507&stdHour=12";	
	String resultJSON = "{}";
	try {
		URL url = new URL(baseUrl);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setDoOutput(true);
		conn.setRequestMethod("GET");
		conn.setRequestProperty("Content-type", "text/html; charset="+charsetName);
        
//		conn.setRequestProperty("Authorization", "Basic 암호화한인증키");
//		conn.setRequestProperty("Accept","*/*");
//		conn.setRequestProperty("Accept-Language","ko");
//		conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
//		conn.setRequestProperty("User-Agent","Mozilla/4.0");
//		conn.setRequestProperty("Host", "서버IP:포트");
//		conn.setRequestProperty("Connection","Keep-Alive");
//		conn.setRequestProperty("Cookie", "바사삭~쿠키");
//		
//		conn.setDoOutput(true);
//		conn.setDoInput(true);
//		conn.setUseCaches(true);        
		
		//conn.setDoInput(true); 
		System.out.println(((HttpURLConnection)conn).getRequestMethod());

//			OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
//			osw.flush();	
		
		int httpResponseCode = conn.getResponseCode();
		BufferedReader rd;
		if(httpResponseCode >= HttpURLConnection.HTTP_OK && httpResponseCode &lt;= HttpURLConnection.HTTP_MULT_CHOICE) {
			rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), charsetName));
		} else {
			rd = new BufferedReader(new InputStreamReader(conn.getErrorStream(), charsetName));
		}
		StringBuilder sb = new StringBuilder();
		String line;
		while ((line = rd.readLine()) != null) {
			sb.append(line);
		}
		rd.close();
		conn.disconnect();
		
		resultJSON = sb.toString();
	} catch (IOException e) {
		e.printStackTrace();
	}
	
	return resultJSON;
}		

public String testPOST() throws Exception
{
	String baseUrl = "http://my-json-server.typicode.com/smallwitch/apitest/posts";	
	String result = "{}";
	JSONObject jsonObj = new JSONObject();
	try {
		URL url = new URL(baseUrl);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setDoOutput(true);
		conn.setRequestMethod("POST");
		conn.setRequestProperty("Content-type", "application/json");
		
		OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), charsetName);
		jsonObj.put("id", 100);
		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		jsonObj.put("title", dateFormat.format(date));
		System.out.println("input: "+jsonObj.toString());
		
		osw.write(jsonObj.toString());
		osw.flush();
		
		int httpResponseCode = conn.getResponseCode();
		BufferedReader rd;
		if(httpResponseCode >= HttpURLConnection.HTTP_OK && httpResponseCode &lt;= HttpURLConnection.HTTP_MULT_CHOICE) {
			rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		} else {
			rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
		}
		StringBuilder sb = new StringBuilder();
		String line;
		while ((line = rd.readLine()) != null) {
			sb.append(line);
		}
		rd.close();
		conn.disconnect();
		
		result = sb.toString();
	} catch (IOException e) {
		e.printStackTrace();
	}
	
	return result;
}

반응형

jackson - ObjectMapper 정리 [계속..]

Posted on 2021. 7. 23. 10:44
Filed Under Programming/Java

배경: jackson 1.9 이하 버전에서 필요해짐.

출처: 직렬화&역직렬화


public class Coordinates {
    byte red;

    @JsonProperty("r")
    public byte getR() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}
///////
Coordinates obj = new Coordinates();
obj.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(obj));

Coordinates r = mapper.readValue("{\"red\":25}",Coordinates.class);
System.out.println("Deserialization: " + r.getR());

///////결과:
Serialization: {"r":5}
Deserialization: 25


public static Map<String, Object> objectToMap(Object obj) {
	ObjectMapper objectMapper = new ObjectMapper();
//	objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
//	objectMapper.configure(Feature.AUTO_DETECT_FIELDS, true);
	
    // value=null일때 처리
	objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
		@Override
		public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
			jgen.writeString("");
		}
	});
	
    // key=null일때 처리
	objectMapper.getSerializerProvider().setNullKeySerializer(new JsonSerializer<Object>() {
		  @Override
		  public void serialize(Object value, JsonGenerator jgen, SerializerProvider serializers) throws IOException, JsonProcessingException {
			  jgen.writeFieldName("null");
		  }
	});
	
	@SuppressWarnings("unchecked")
	Map<String, Object> map = objectMapper.convertValue(obj, Map.class);
	return map;
}


 

반응형

About

by 쑤기c

반응형