83387
いままで自分で１から作ったものしか git であつかったことがないんですが  
外部で git で公開されているものを一部機能改修して使いたいと思ってます  
この場合どういう手順で管理すればいいのでしょうか

clone して .git を削除して git init しなおしてから  
feature branch なりをきって修正入れて自分のリポジトリに push

みたいなことをやると本家のコミット履歴を所持していないため  
本家で改修があったときにそれをとりこむことができない気がするんですが方法ってありますか？

あるいは本家のコミット履歴を保持したまま  
独自修正ブランチを切ってそのブランチだけリモートブランチを自分のリポジトリにするみたいなことってできるんでしょうか

自分の修正をパッチ化しておいて  
本家修正があったら毎回クローンしてそれをあてるみたいな方法しか思いつかないのですが  
git の機能でうまくやる方法ってあったりしますか？

* * *

fork に関して記事をよんでみたんですが

[リポジトリのcloneとforkの違い](https://qiita.com/matsubox/items/09904e4c51e6bc267990)

> fork  
>  他人のリポジトリを自分のアカウントのリモートリポジトリにコピーすること
>
> オリジナルのリポジトリへの貢献が前提  
>  forkした場合そのリポジトリを所有する開発者に通知される

[GitHubのforkはリポジトリの複製
フォークの手順と、クローン、ブランチとの違い](https://style.potepan.com/articles/31067.html)

> GitHubのフォークとクローンの違い  
>
> cloneとforkは何が違うんでしょう？cloneとはリポジトリの複製を、単にローカル環境に作成することを言います。ローカルにクローンしたリポジトリに対しては、自由にコミット、プッシュ、マージをおこなうことができます。
>
>
> forkすると、オリジナルのリポジトリの所有者にforkしたことが通知されます。OSSの開発などでは、forkすること＝バグ潰しの手伝いをするなど貢献の意思ありと見なされることがあるようです。面識のないリポジトリオーナーにforkをおこなう際は、注意したほうが良いかも知れません。
>
> 単に公開されているリポジトリをベースにして何かを作ろう、とか、ビルドして動きを見てみようという場合ならforkではなくcloneを使うのが良いでしょう。

等とあったので少し怖いので質問した次第です

基本的にはローカル更新のみでリモートからは時々アップデートを取り込みたいだけで  
本家側に影響を与えるようなことは一切したくないのですが  
それでも fork が適しているんでしょうか？

* * *

**追記：**

**本家は github でプライベートリポジトリは bitbucket で使いたいソフトウェアは MIT ライセンスです**

git コマンド上での操作に関する方法論  
ブランチ管理の仕方やリモートリポジトリの初期設定方法  
に関しておききしたいです

ビジネスロジックとかを追加したり  
あまりよくないですがパスワード情報なんかを埋め込んだりしたりした場合  
当然社外に出すのはNGになるので  
間違っても本家に push したりしないようにしたい  
（もちろん書き込み権限がないのではじかれるとは思いますが）  
かつ 必要に応じて修正は取り込みたいと

とくに origin が本家のままだと  
なにげなく push コマンドうっちゃうだけで危ないので  
本家のリモートリポジトリ情報は全部消したい

という感じです

普通にビジネスだとよくあるケースだと思うんですがどうやって管理するのが普通なのかなと

  1. 本家から git clone

  2. .git の中のリモートリポジトリの情報をエディタとかで自分の bitbucket にかきかえ

  3. 本家とかぶらない独自ブランチをきって bitbucket に push  
それをマスターブランチにする

  4. 本家をとり込むときは remote add せずに  
`git pull https://github.com/xxx/xxx.git master`

みたいにすればやりたいことはできそうですが  
これが普通なのかどうか  
git 自体にもっと簡単にリモートを切り替える方法があるかを知りたいです

フォークしたことが本家に知られるのは問題ないですし  
コラボしたくないわけではなく改変するしないにかかわらずバグをみつけて報告すべき内容であれば報告はします
CC BY-SA 4.0
2021-10-29T02:55:21.510
83317
2021-11-02T05:51:25.693
2021-11-01T02:59:46.443
question
git
公開されてるリポジトリに独自修正を加えて管理する方法
元のリポジトリをフォークした後、上流リポジトリ (upstream)
として追いかけつつ、任意のタイミングで自分が管理するブランチに適時マージをすれば良いと思います。

どうブランチを管理するかはポリシー次第なので、一概には言えません。

  * 元リポジトリの main (master) をそのまま維持し、自分のリポジトリでは別のブランチを用意する
  * 自分のリポジトリで独自に編集したものを main とし、元リポジトリの main は別のブランチ名で追いかける

いずれにしても、マージのタイミングでコンフリクトが発生した場合には、それを都度解決する必要があります。

参考:  
[フォークを使って作業する - GitHub Docs](https://docs.github.com/ja/github/collaborating-
with-pull-requests/working-with-forks)  
[上流リポジトリをフォークにマージする - GitHub
Docs](https://docs.github.com/ja/github/collaborating-with-pull-
requests/working-with-forks/merging-an-upstream-repository-into-your-fork)

* * *

**追記:**  
フォークは Git ではなく GitHub が提供する (プルリクエスト等の)
コラボレーションを目的とした機能の一つです。元リポジトリに何も影響を与えるつもりが無いのであれば、フォークから始めるメリットは薄いと思います。  
フォークを使わずとも、リモートリポジトリとして設定を追加して変更を追うこと自体はもちろん可能です。

「元リポジトリのオーナーに知られるから」という理由でフォークを避けるのは、どこか違う気がします。

フォークまたは単にクローンでコピーするだけのどちらを使うかは、以下のドキュメントも参照してください。

[フォークについて - GitHub Docs](https://docs.github.com/ja/github/collaborating-with-
pull-requests/working-with-forks/about-forks)

> リポジトリのフォークはリポジトリのコピーと似ていますが、次の 2 つの大きな違いがあります。
>
>   * プルリクエストを使ってユーザが所有するフォークからの変更をオリジナルのリポジトリ（上流のリポジトリとも呼ばれます）に提案できます。
>   * 上流のリポジトリと自分のフォークを同期させることで、上流のリポジトリからの変更を自分のローカルフォークへ持ち込めます。
>

>
> (中略)
>
>
> 既存のリポジトリのコンテンツから新しいリポジトリを作成するが、将来にわたって変更を上流にマージしない場合、リポジトリを複製するか、リポジトリがテンプレートである場合は、リポジトリをテンプレートとして使うことができます。
CC BY-SA 4.0
2021-10-29T05:53:29.910
83321
2021-10-29T11:27:38.873
2021-10-29T11:27:38.873
3060
3060
83317
answer
* 第三者が作成したオリジナルのリポジトリ(GitHub)
  * 自分が作成したリモートリポジトリ(Bitbucket)
  * 自分の作業用ローカルリポジトリ

上の3つのリポジトリが関わる話かと思います。

やり方はいくつかあるかと思いますが、オリジナルリポジトリ(GitHub)の変更は一旦ローカルリポジトリに取り込んだ上で、マージ作業などを行ってから自分のリモートリポジトリ(Bitbucket)に反映する、というのが安全で簡単かと思います。

上記の前提での手順は:

  1. 自分の Bitbucket スペースにオリジナルのリポジトリをインポートします(クラウド版 Bitbucket では <https://bitbucket.org/repo/import> から行えます)。  
"古いリポジトリ" の URL にオリジナルリポジトリのURL( `https://github.com/<user-name>/<repository-
name>.git` ) を設定します。

  2. 上記で作成した Bitbucket 上のリモートリポジトリをローカルへ `clone` します: 
```    git clone <Bitbucket リポジトリの URL>

```

  3. 上記で作成したローカルリポジトリのディレクトリに入って、オリジナルのリポジトリを登録します(次の例では `vendor` という名前で登録していますが、別の名前でも構いません): 
```    git remote add vendor <オリジナルリポジトリのURL>

```

上の設定を行った後 `git remote -v` コマンドを実行すると、 `origin` として自分の Bitbucket リポジトリが、
`vendor` としてオリジナル GitHub リポジトリが登録されていることが出力されると思います。

  * `git fetch --all` で双方のリモートリポジトリから更新を取り込めます。
  * `git branch -r` で双方のリモートリポジトリのブランチを出力できます。
  * オリジナルリポジトリのブランチをチェックアウトする場合は `git checkout vender/master` のように、接頭に `vender/` を付けるようにすれば追跡ブランチが自動で作成されません([参考](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81#r_tracking_branches))。 
    * ので、オリジナルリポジトリに対して `push` 操作を誤って行ってしまうことを防げるかと思います。
CC BY-SA 4.0
2021-11-02T05:51:25.693
83387
2021-11-02T05:51:25.693
2808
83317
answer