레이블이 git인 게시물을 표시합니다. 모든 게시물 표시
레이블이 git인 게시물을 표시합니다. 모든 게시물 표시

2022년 8월 12일 금요일

git 기본정보

 

git 소개

  - 분산파일 시스템

  subversion : 파일변화를 시간단위로 관리

  git : 스냅샷형태로 관리


  commited : 데이터에 DB에 저장

  modified : 수정한 파일이 DB에 커밋되지 않음

  staged :  수정한 파일을 커밋


  working tree의 파일 수정


  staging : 커밋한 스냅샷 생성, staging에 커밋해서 git에 업로드


  tracked : git이 관리하는 파일

    - unmodifed : 수정되지 않은 상태

- modified : 수정된 파일

- staged : 커밋후 저장소 기록예정

  untracked : git이 관리하지 않는 파일


  author : 원작자

  committer : 수정자


  git add를 복구할때

    -> git reset HEAD 파일명

  리모트 저장소는 origin이 자동등록


  git remote add {name} URL

  git fetch {name} 

   --> origin으로 입력하면 clone이후 수정한 모든 데이터를 가지고 옴


  리모트 저장소에 push방법

   -> git push origin master

    -> 다름사람이 push한내용은 push 불가

-> merge 후 push 가능


태그 : 2가지 형태의 태그 기능 

 light weight : 특정커밋의 포인터 이름 

 -> git tag {tagname}

 annotated : 일반적인 태그 방법

 -> git tag -a {tagname}


 특정커밋의 태그 확인

 -> git log --pretty=online


 태깅할 체크썸 확인

 -> git tag -a {tagname} 체크섬 전부 다 입력할 필요는 없고 앞 7자리만 알고 있으면 됨(고유번호)


태그 공유

 -> git push origin {tagname}

   * 여러개인 경우 git push origin --tags


특정 태그 checkout

 -> git checkout {tagname}

  * detached HEAD(떨어져나온 HEAD) 메시지 출력(정상)

  * 브랜치에서 작업하는 것과 다르게 작동하게 됨

  커밋하게 되면 생성된 커밋을 사용할 수 있는 브랜치가 다르기 때무네 가급적 브랜치를 이용해서 관리


브랜치

 staging area : 스냅샷에 대한 메타 데이터, 이전커밋의 포인터 정보 저장

 파일을 stage하면 저장소에 파일 저장(이를 Blob라고 호칭)

 기본적으로 master 브랜치 생성된


 브랜치 생성 -> git branch {branchname}

 브랜치 이동 -> git checkout {branchname}

 프랜치 생성하면서 체크아웃 ->  git checkout -b {branchname}



머지

 git merge {branchname}

 * fast-forward : 브랜치 포인터는 자동으로 최신커밋이동


 브랜치 삭제 : git branch -d {branchname}


 만약 개발자가 개발중에 이슈처리를 하게 되는 경우

 git checkout {branchname}


 이슈 처리 후 머지하는 경우

git checkout master

git merge {branchname}


 머지 충돌

   3way merge으로 수행하는 경우 두 브랜치에서 같은 파일을 수정할때 발생

   <<< --> 이건 HEAD버전

   >>> --> 이건 현재 버전


  브랜치의 머지 여부 확인 git branch --merge / --no-merged 

  머지하지 않은 브랜치 삭제는 -D 사용


브랜치 관리 전략

 3way merge이기 때문에 자이간에 걸쳐서 한브랜치를 다른 브랜치와 여러번 머지하는것이 쉬움.



출처 - http://igoni.kr/books/linux/page/git

gitlab설치

Gitlab 설치 가이드

  1. 설치파일 다운로드
    $ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
  2. Gitlab config 설정(변경이 필요한 사항만 기재)
     $> vi /etc/gitlab/gitlab.rb
    #################################################
    external_url 'http://{{서버IP}}:8080'
    
    gitlab_rails['artifacts_path'] = "/opt/gitlab/gitlab-rails/shared/artifacts"
    gitlab_rails['external_diffs_storage_path'] = "/opt/gitlab/gitlab-rails/shared/external-diffs"
    gitlab_rails['lfs_enabled'] = true
    gitlab_rails['lfs_storage_path'] = "/opt/gitlab/gitlab-rails/shared/lfs-objects"
    gitlab_rails['backup_path'] = "/opt/gitlab/backups"
    gitlab_rails['shared_path'] = '/opt/gitlab/gitlab-rails/shared'
    gitlab_rails['dir'] = "/opt/gitlab/gitlab-rails"
    gitlab_rails['uploads_directory'] = "/opt/gitlab/gitlab-rails/uploads"
    gitlab_rails['redis_socket'] = "/opt/gitlab/redis/redis.socket"
    gitlab_rails['registry_path'] = "/opt/gitlab/gitlab-rails/shared/registry"
    gitlab_rails['registry_key_path'] = "/opt/gitlab/gitlab-rails/certificate.key"
    
    registry['dir'] = "/opt/gitlab/registry"
    registry['rootcertbundle'] = "/opt/gitlab/registry/certificate.crt"
    
    gitlab_workhorse['listen_addr'] = "/opt/gitlab/gitlab-workhorse/socket"
    gitlab_workhorse['auth_backend'] = "http://localhost:8080"
    gitlab_workhorse['dir'] = "/opt/gitlab/gitlab-workhorse"
    
    user['home'] = "/opt/gitlab"
    
    unicorn['port'] = 8080
    unicorn['socket'] = '/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
    
    puma['socket'] = '/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
    
    gitlab_shell['auth_file'] = "/opt/gitlab/.ssh/authorized_keys"
    gitlab_shell['dir'] = "/opt/gitlab/gitlab-shell"
    
    postgresql['port'] = 25432
    postgresql['data_dir'] = "/opt/gitlab/postgresql/data"
    postgresql['shared_buffers'] = "3GB"
    postgresql['dir'] = "/opt/gitlab/postgresql"
    postgresql['home'] = "/opt/gitlab/postgresql"
    
    redis['enable'] = true
    redis['dir'] = "/opt/gitlab/redis"
    redis['maxclients'] = "20000"
    redis['maxmemory'] = "128m"
    redis['maxmemory_policy'] = "allkeys-lru"
    redis['maxmemory_samples'] = "5"
    redis['tcp_backlog'] = 511
    redis['tcp_timeout'] = "120"
    redis['tcp_keepalive'] = "300"
    
    web_server['home'] = '/opt/gitlab/nginx'
    nginx['dir'] = "/opt/gitlab/nginx"
    
    gitlab_pages['dir'] = "/opt/gitlab/gitlab-pages"
    
    gitlab_rails['pages_path'] = "/opt/gitlab/gitlab-rails/shared/pages"
    gitlab_ci['builds_directory'] = '/opt/gitlab/gitlab-ci/builds'
    
    mattermost['home'] = '/opt/gitlab/mattermost'
    mattermost['file_directory'] = "/opt/gitlab/mattermost/data"
    mattermost['plugin_directory'] = "/opt/gitlab/mattermost/plugins"
    mattermost['plugin_client_directory'] = "/opt/gitlab/mattermost/client-plugins"
    
    prometheus['home'] = '/opt/gitlab/prometheus'
    prometheus['log_directory'] = '/var/log/gitlab/prometheus'
    prometheus['rules_files'] = ['/opt/gitlab/prometheus/rules/*.rules']
     prometheus['flags'] = {
      'storage.tsdb.path' => "/opt/gitlab/prometheus/data",
      'storage.tsdb.retention.time' => "15d",
      'config.file' => "/opt/gitlab/prometheus/prometheus.yml"
    }
    
    alertmanager['home'] = '/opt/gitlab/alertmanager'
    alertmanager['flags'] = {
      'storage.path' => "/opt/gitlab/alertmanager/data",
      'config.file' => "/opt/gitlab/alertmanager/alertmanager.yml"
    }
    
    node_exporter['home'] = '/opt/gitlab/node-exporter'
     node_exporter['flags'] = {
      'collector.textfile.directory' => "/opt/gitlab/node-exporter/textfile_collector"
    }
    
     redis_exporter['flags'] = {
      'redis.addr' => "unix:///opt/gitlab/redis/redis.socket",
    }
    
    postgres_exporter['home'] = '/opt/gitlab/postgres-exporter'
    
    gitlab_exporter['home'] = "/opt/gitlab/gitlab-exporter"
    
    grafana['home'] = '/opt/gitlab/grafana'
    
    gitaly['dir'] = "/opt/gitlab/gitaly"
     gitaly['env'] = {
     'PATH' => "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/bin:/usr/bin",
     'HOME' => '/opt/gitlab'
    }
     gitaly['socket_path'] = "/opt/gitlab/gitaly/gitaly.socket"
     gitaly['certificate_path'] = "/opt/gitlab/gitaly/certificate.pem"
     gitaly['key_path'] = "/opt/gitlab/gitaly/key.pem"
    
    storage_check['target'] = 'unix:///opt/gitlab/gitlab-rails/sockets/gitlab.socket'
    
    letsencrypt['wwwroot'] = '/opt/gitlab/nginx/www'
    
    gitlab_rails['packages_storage_path'] = "/opt/gitlab/gitlab-rails/shared/packages"
    gitlab_rails['dependency_proxy_storage_path'] = "/opt/gitlab/gitlab-rails/shared/dependency_proxy"
  3. Gitlab구성
    $> gitlab-ctl reconfigure
    ...
    $>  gitlab-ctl status
    run: alertmanager: (pid 53654) 128s; run: log: (pid 51389) 343s
    run: gitaly: (pid 53701) 127s; run: log: (pid 50464) 435s
    run: gitlab-exporter: (pid 53722) 127s; run: log: (pid 51157) 363s
    run: gitlab-workhorse: (pid 53725) 127s; run: log: (pid 50986) 382s
    run: grafana: (pid 53749) 126s; run: log: (pid 51725) 300s
    run: logrotate: (pid 53765) 126s; run: log: (pid 51079) 373s
    run: nginx: (pid 53773) 125s; run: log: (pid 51012) 381s
    run: node-exporter: (pid 53781) 125s; run: log: (pid 51118) 369s
    run: postgres-exporter: (pid 53788) 125s; run: log: (pid 51435) 339s
    run: postgresql: (pid 53874) 124s; run: log: (pid 50596) 428s
    run: prometheus: (pid 53883) 124s; run: log: (pid 51320) 349s
    run: redis: (pid 53898) 123s; run: log: (pid 50307) 457s
    run: redis-exporter: (pid 53973) 123s; run: log: (pid 51250) 357s
    run: sidekiq: (pid 53987) 120s; run: log: (pid 50943) 386s
    run: unicorn: (pid 53999) 119s; run: log: (pid 50895) 394s
  4. redis socket 파일 위치 변경 ( gitlab-ctl status 실행결과시 redis가 down되어 있는 경우 조치)
    $> vi /opt/gitlab/redis/redis.conf
    ...
    unixsocket /opt/gitlab/redis/redis.socket
    ...
  5. gitlab 재시작 후 상태 확인
    $> gitlab-ctl restart
    $> gitlab-ctl status
    run: alertmanager: (pid 13812) 32s; run: log: (pid 10837) 369s
    run: gitaly: (pid 13828) 31s; run: log: (pid 9829) 454s
    run: gitlab-exporter: (pid 13851) 31s; run: log: (pid 10641) 388s
    run: gitlab-workhorse: (pid 13862) 30s; run: log: (pid 10372) 410s
    run: grafana: (pid 13878) 30s; run: log: (pid 11193) 334s
    run: logrotate: (pid 13892) 30s; run: log: (pid 10493) 400s
    run: nginx: (pid 13898) 29s; run: log: (pid 10425) 406s
    run: node-exporter: (pid 13907) 29s; run: log: (pid 10532) 396s
    run: postgres-exporter: (pid 13990) 28s; run: log: (pid 10911) 364s
    run: postgresql: (pid 14000) 28s; run: log: (pid 9974) 446s
    run: prometheus: (pid 14009) 27s; run: log: (pid 10769) 376s
    run: redis: (pid 14024) 27s; run: log: (pid 9733) 460s
    run: redis-exporter: (pid 14031) 27s; run: log: (pid 10695) 382s
    run: sidekiq: (pid 14038) 26s; run: log: (pid 10323) 416s
    run: unicorn: (pid 14050) 25s; run: log: (pid 10280) 421s


adfit

AI들끼리 대화하기

ChatGPT, perplexity, Gemini... 많은 AI 서비스가 있고 서비스별로 다양한 엔진이 있죠. 문득 AI끼리 대화를 시켜보면 어떤 대화의 흐름을 이어갈까 궁금해졌습니다. 그래서 해보았습니다. 규 칙 나(사람)은 양쪽 AI에서...